2014-09-15 1 views
3

내 활동은 BroadcastReceiver와 AsyncTask로 구성되며, 둘 다 ArrayList를 업데이트합니다 (매우 자주). 나는 백그라운드에서 AsyncTask가 실행된다는 것을 알고 있으며 BroadcastReceiver와 AsyncTask 스레드가 ArrayList를 동시에 업데이트 할 수있는 가능성이있을 수 있습니다. 스레드로부터 안전하게 만들려면 어떻게해야합니까?안드로이드 - arraylist 업데이트 중 스레드 안전

편집 : 알렉산더 언급했듯이, 명시 적으로 달리 구현하지 않는 한 BroadcastReceiver는 주 스레드에서 실행됩니다.

+1

https://developer.android.com/reference/java/util/Vector.html <<< 당신이 우리에게 코드를 표시하지 않는 한 큐 구조 – Budius

+0

시도 (두 스레드) 그 액세스 및 목록을 업데이 트, 그것은 신뢰할 수있는 대답을 줄 수 없습니다. (* 작동 할 수있는 다양한 방법이 있습니다 ...) – jbutler483

+0

를 만드는이 –

답변

2

AsyncTask는 별도의 스레드로 실행됩니다. 당신이 'registerReceiver'에 달리 지정하지 않는 한 브로드 캐스트 리시버는 일반적으로, 메인 스레드에서 실행 (여기 참조 : http://developer.android.com/reference/android/content/Context.html#registerReceiver(android.content.BroadcastReceiver,%20android.content.IntentFilter,%20java.lang.String,%20android.os.Handler) )

당신은 Budius 쓴 같은 벡터를 사용하거나 동기화 된 와 ArrayList에 대한 모든 액세스를 포장 할 수 있습니다 블록 :

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

감사합니다. BroadcastReceiver가 주 스레드에서 실행되었음을 알았습니다. 좋은 캐치! 또한 Budius 덕분에 Vector에 참여하기로 결정했습니다. – user1164937