我有AsyntTask
从onCreate
开始并无限循环,更新了UI元素。
更新以这种方式完成(Async扩展类的简化表示,我们称之为asyncExtender().execute()
):
doInBackground(){
while (!isCancelled()) {
Thread.sleep(2000);
publishProgress(someValue);
}
}
protected void onProgressUpdate() {
super.onProgressUpdate(values);
// UI update here, e.g. TextView.setText
}
启动另一个活动,我们称之为SecondActivity。 SecondActivity利用操作栏中的分层后退按钮返回上一个活动(NavUtils.navigateUpFromSameTask(this)
中的onOptionsItemSelected
)。
问题在于,当我点击SecondActivity中操作栏中的后退按钮 时,AsyncTask似乎在第一个活动中不再运行(UI不会每2秒更新一次)。另一方面,如果我使用硬件“后退”按钮它可以正常工作 - AsyncTask继续运行。
为什么行为不同以及如何解决?
答案 0 :(得分:0)
AsyncTasks不应该同时启动,并且它们也不能设计为运行时间太长,最多几秒钟。根据您定位的API,AsyncTasks可能会同步运行,因此您的新AsyncTask将仅在所有先前的AsyncTask完成时运行,摘录为docs:
http://developer.android.com/reference/android/os/AsyncTask.html
首次引入时,AsyncTasks在单个上串行执行 背景线程。从DONUT开始,这被改成了一个池 允许多个任务并行运行的线程。从...开始 HONEYCOMB,任务在单个线程上执行以避免常见 并行执行导致的应用程序错误。