1

我有一个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)in onOptionsItemSelected)。

问题是,当我在 SecondActivity的操作栏中点击后退按钮时,AsyncTask 似乎不再在第一个活动中运行(UI 不会每 2 秒更新一次)。另一方面,如果我使用硬件“后退”按钮,它工作正常- AsyncTask 继续运行。

为什么行为差异以及如何解决?

4

1 回答 1

0

AsyncTasks 不应该同时启动,它们也不应该运行太长时间,最多几秒钟。根据您所针对的 API,AsyncTasks 可能会同步运行,因此您的新 AsyncTask 将仅在所有以前的任务完成后运行,文档摘录:

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

首次引入时,AsyncTask 在单个后台线程上串行执行。从 DONUT 开始,这被更改为允许多个任务并行运行的线程池。从 HONEYCOMB 开始,任务在单个线程上执行,以避免并行执行导致的常见应用程序错误。

于 2012-11-04T21:53:04.510 回答