我的Activity包含一个BroadcastReceiver和一个AsyncTask,它们都更新了一个ArrayList(经常)。我知道AsyncTask在后台运行,并且BroadcastReceiver和AsyncTask线程可能同时更新ArrayList。如何让它们成为线程安全的?
编辑:正如alexander所说,除非你明确地实现它,否则在主线程上运行BroadcastReceiver。答案 0 :(得分:2)
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,或使用同步块包装对ArrayList的所有访问权限:
synchronized(myList){
myList.add(itemToAdd);
}