2013-03-07 31 views
0

我似乎無法找到這個問題的答案我有:Android。 ACRA。是putCustomData線程安全

是從ACRA庫的方法...

ACRA.getErrorReporter().putCustomData(Name, Content);

...線程安全?

我想從兩個不同的線程調用它,我不知道我是否應該。

我已經通過的文件搜索,但我沒能找到與此相關的任何不幸的是,也許我只是一個壞Googleler :)

回答

1

所以我想我已經弄明白了。

翻閱代碼我注意到putCustomData方法實際上是對HashMap's方法的調用,更準確地說是put

經過進一步的搜索,我發現方法put不同步。

所以答案是否定的,從兩個不同的線程調用putCustomData會給你帶來問題。

對於問題的解決方案:請參閱323go的想法如下。在我的情況中,我已經有了一個單獨的類,所以我只是在該類中放置了一個同步方法,我在其中調用putCustomData方法。

注:如果我錯了,有人請讓我知道,但是這是我能找到答案。

+1

HashMap確實不是線程安全的。但是,您可以通過將該賦值更改爲'ConcurrentHashMap'或使用'Collections.synchronizedMap(...)'來實現。當然,這需要修改您的ACRA源代碼,並且單例中的同步塊(或方法)是較少干擾的替代方案。 – 323go 2013-03-07 17:43:16

+0

確實。試過了,顯然它起作用了。 :) – AndreiBogdan 2013-03-07 18:32:49

1

如果你不知道,買一些保險:

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

不是一個壞主意......如果我無法找到答案,我一定會走這條路。謝謝。 (順便說一句......這很有趣:)) – AndreiBogdan 2013-03-07 16:36:35

+0

由於ACRA是OSS,你可以在他們的代碼中偷看。並且請回復你學到的東西,這將爲未來的求助者節省一些時間。 – 323go 2013-03-07 16:58:34

+0

剛剛做了3秒鐘...我想/希望我是對的。 – AndreiBogdan 2013-03-07 17:00:20