我的Activity包含一个BroadcastReceiver和一个AsyncTask,它们都更新了一个ArrayList(经常).我知道AsyncTask在后台运行,并且BroadcastReceiver和AsyncTask线程可能同时更新ArrayList.我怎样才能让它们成为线程安全的呢?
编辑:正如亚历山大提到的,除非你明确地实现它,否则在主线程上运行BroadcastReceiver.
最佳答案 AsyncTask作为单独的线程运行.
BroadcastReceiver通常在主线程上运行,除非你在’registerReceiver’中另外指定(参见这里:
http://developer.android.com/reference/android/content/Context.html#registerReceiver(android.content.BroadcastReceiver,%20android.content.IntentFilter,%20java.lang.String,%20android.os.Handler)
)
您可以使用Budius编写的Vector,也可以使用synchronized块包装对ArrayList的所有访问:
synchronized(myList){
myList.add(itemToAdd);
}