我有一个活动,在执行过程中,它启动了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