2013-03-07 2 views
0

안전 putCustomData 실인가 안전한?Android. ACRA.</p> <p>가 ACRA 라이브러리의 방법입니다 ...</p> <p><code>ACRA.getErrorReporter().putCustomData(Name, Content);</code></p> <p>... 스레드 : 나는 데이 질문에 대한 답을 찾을 수 없습니다

두 개의 다른 스레드에서 호출하고 싶습니다. 그렇지 않으면 해야할지 잘 모르겠습니다.

나는이 문서를 통해 검색 한하지만 불행하게도이에 관련된 아무것도 찾을 수 없습니다, 또는 당신이 확실하지 않은 경우 어쩌면 난 그냥 나쁜 Googleler :

답변

1

그래서 생각해 봅니다.

코드를 살펴보면 putCustomData 메서드는 실제로 HashMap's 메서드를 호출하는 것으로 나타 났으며,보다 정확하게는 put입니다.

추가 검색시 put 메서드가 동기화되지 않은 것으로 나타났습니다.

대답은 아니오입니다. 두 개의 다른 스레드에서 putCustomData을 호출하면 문제가 발생할 수 있습니다.

에 대한 해결책 : 아래 323go 님의 아이디어를 참조하십시오. 필자의 경우에는 이미 싱글 톤 클래스를 사용했기 때문에 putCustomData 메서드를 호출 한 클래스에 동기화 된 메서드를 배치했습니다.

참고 : 만약 내가 잘못가, 누군가가 알려 주시기 바랍니다,하지만 내가 찾을 수 있었던 것입니다.

+1

HashMap은 실제로 스레드로부터 안전하지 않습니다. 그러나 할당을 ConcurrentHashMap으로 변경하거나 Collections.synchronizedMap (...)을 사용하여 지정할 수 있습니다. 물론 ACRA 소스의 수정이 필요하며, 싱글 톤 내의 동기화 된 블록 (또는 방법)은 덜 관입적인 대안입니다. – 323go

+0

실제로. 그것을 시도, 분명히 작동합니다. :) – AndreiBogdan

1

해요, 어떤 보험에 가입 :

ErrorReporter er = ACRA.getErrorReporter(); 
synchronized(er) { 
    er.putCustomData(..., ....); 
} 
+1

나쁘지 않은 생각 ... 내가 대답을 찾을 수 없으면 나는 분명히이 길로 갈 것이다. 감사. (Btw ... that funny :) :) – AndreiBogdan

+0

ACRA는 OSS이므로 코드를 살펴볼 수 있습니다. 그리고 배운 것을 다시 게시하십시오. 그러면 미래의 애원자에게 시간을 절약 할 수 있습니다. – 323go

+0

3 초 전 방금 ... 나는 내가 옳다고 생각한다. – AndreiBogdan