나는 실행 중에 액서스가 AsyncTask
이고 어떤 것은 Thread
이다.안드로이드 - 쓰레드 추적하기
이 계속되면 활동이 파괴 될 때/오류 모든 종류의 내가 할 수있는 것을 의미 ArrayList<Thread>()
및 ArrayList<AsyncTask>()
에 자신을 추가하고 있으니, 내 밝은 아이디어가 아닌 각 UI 스레드가 자신을 등록하는 것이었다 발생 후 다시,들의 OnDestroy() 이 ArrayLists를 통해 반복하고 그래서 같이 그들을 파괴 :
@Override
public void onDestroy()
{
for(AsyncTask task : tasks)
task.cancel(true);*
for(Thread thread : threads)
thread.interrupt();
}
불행하게도이 *로 표시된 줄에 java.util.ConcurrentModificationException
가 발생합니다. 각 for
루프를 synchronize
블록에 배치하여 ArrayList
이 다른 Thread
에 의해 수정되지 않도록 확인했습니다.
Do AsyncTask
do 완료시 자체 파괴 (따라서 위의 오류가 발생 함)?
안드로이드 환경에서 스레드를 제어하는 더 좋은 방법을 아는 사람이 있습니까? for(int i =0 : i < array.size() ; i++)
를 사용하는 코드를 변경
편집
이 문제를 해결하기 위해 보이지만 난 여전히/그런 일이 왜/알고 싶다 :
synchronized(tasks)
{
for(int i=0; i < tasks.size(); i++)
tasks.get(i).cancel(true);
}
synchronized(threads)
{
for(int i=0; i < threads.size(); i++)
threads.get(i).interrupt();
}
나는 세마포어 등을 통해 자바 쓰레드와 밀접하게 통신하는 네이티브 메소드를 실행 중이다. – Graeme
그리고 더 이상 실행되지 않을 때 destroy()를 호출 할 때 "사라집니다"? – Graeme