2014-09-15 1 views
3

Моя активность состоит из BroadcastReceiver и AsyncTask, оба из которых обновляют ArrayList (очень часто). Я понимаю, что AsyncTask работает в фоновом режиме, и может возникнуть возможность, когда потоки BroadcastReceiver и AsyncTask могут одновременно обновлять ArrayList. Как я могу сделать их потокобезопасными?Android - безопасность нитей при обновлении arraylist

EDIT: Как отметил Александр, BroadcastReceiver запускается в основном потоке, если вы явно не реализуете его иначе.

+1

https://developer.android.com/reference/java/util/Vector.html <<< это – Budius

+0

попытка создать структуру очереди – jbutler483

+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) )

Вы можете использовать Vector как писал Budius, или обернуть весь доступ к ArrayList с синхронизированной блок:

synchronized(myList){ 
    myList.add(itemToAdd); 
} 
+0

Спасибо, я не знал, что BroadcastReceiver побежал по главной теме. Хорошо поймал! Кроме того, я решил пойти с Vector благодаря Budius. – user1164937

Смежные вопросы