1

我有一个AsyntTask,它以onCreate开头,并无限循环更新UI元素。AsyncTask在通过ActionBar返回到活动时不会恢复返回图标

更新以这种方式完成(异步扩展类的简化表示,姑且称之为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似乎没有在第一个活动运行了(用户界面不会得到每2秒更新一次)。另一方面,如果我使用硬件“返回”按钮,它工作正常 - AsyncTask保持运行。

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

回答

0

AsyncTasks不应该同时启动,它们也不会被设计为运行时间太长,最多几秒钟。根据该API你的目标,AsyncTasks可能会同步运行,因此新的AsyncTask将只有当所有以前的成品中运行,对于文档摘录:

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

当第一次推出,AsyncTasks被串行执行上后台线程单个 。从DONUT开始,将其更改为允许多个任务并行操作的 线程池。从 HONEYCOMB开始,任务在单个线程上执行,以避免并行执行导致的常见应用程序错误 。

+0

除了使用服务,我认为这对于这样简单的场景(带有声明等等)来说会是一种矫枉过正,您的建议是什么? –

+0

或者使用ExecutorService或者我提供的读链接,AsyncTask可以启用并行运行 - 这可能更好 - 只是为了检查这是否是问题的根源 – marcinj

相关问题