我有一個活動,在執行過程中,它啓動了AsyncTask
秒和幾個Thread
s。Android - 跟蹤主題
如果這些繼續當活動被銷燬/重建則錯誤的種種會發生,所以我的好主意是讓每一個非UI線程自身進行註冊,將自身添加到ArrayList<Thread>()
和ArrayList<AsyncTask>()
這意味着我可以,的onDestroy()通過這些迭代的ArrayList並摧毀他們,像這樣:
@Override
public void onDestroy()
{
for(AsyncTask task : tasks)
task.cancel(true);*
for(Thread thread : threads)
thread.interrupt();
}
不幸的是,這將引發上標有*的線java.util.ConcurrentModificationException
。我試圖在synchronize
塊中包裝每個for
循環以確保ArrayList
不被其他Thread
修改。
做AsyncTask
完成後自毀(因此拋出上面的錯誤)?
有誰知道在Android環境中控制線程的更好方法嗎?
編輯
更改爲使用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();
}
我正在運行本地方法,通過信號燈等與Java線程進行密切通信。 – Graeme
然後,「消失」,因爲他們在不再跑步時稱自己爲摧毀()。 – Graeme