通过ActionBar返回图标返回活动时AsyncTask不会恢复

时间:2012-11-04 21:48:06

标签: android multithreading android-asynctask android-activity

我有AsyntTaskonCreate开始并无限循环,更新了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继续运行。

为什么行为不同以及如何解决?

1 个答案:

答案 0 :(得分:0)

AsyncTasks不应该同时启动,并且它们也不能设计为运行时间太长,最多几秒钟。根据您定位的API,AsyncTasks可能会同步运行,因此您的新AsyncTask将仅在所有先前的AsyncTask完成时运行,摘录为docs:

http://developer.android.com/reference/android/os/AsyncTask.html

  

首次引入时,AsyncTasks在单个上串行执行   背景线程。从DONUT开始,这被改成了一个池   允许多个任务并行运行的线程。从...开始   HONEYCOMB,任务在单个线程上执行以避免常见   并行执行导致的应用程序错误。