Android异步任务取消/停止

13

我希望您能告诉我停止异步任务的最佳方法。

我已经尝试过

@Override protected void onCancelled() { 
      super.onCancelled(); 
      mTask.cancel(true);       
 }

我也尝试过

asyncTaskObject.cancel(true);

当与事件关联时,这特别有效。

但是假设场景是:有4个AsyncTask。第一个调用第二个,第二个调用第三个,第三个调用第四个。当用户进入活动时,没有对话框。否则我们可以在那里使用onCancel方法。当用户在页面上的任何位置单击时,如果用户没有单击任何地方,则不显示对话框,但异步任务仍在后台运行。假设用户单击“返回”按钮或导航图标到主页,则将用户带出当前活动。但异步任务仍在后台运行,最终应用程序崩溃。我已经在onBackPressed中使用了cancel方法。但问题是你不能确定哪个任务正在运行,应用程序再次崩溃。

有什么解决办法吗?

3个回答

19

将AsyncTask对象作为实例变量保留引用,然后在onDestroy()方法中执行此操作

@Override
protected void onDestroy() {
    if (mTask != null) {
        mTask.cancel(true);
    }

    super.onDestroy();
}

4

0

我不确定您何时想要取消任务,但是这里有几个建议:a)保留对每个正在运行的任务的引用。b)为对话框添加解除侦听器,并在那里取消所有任务(如果这是您想要做的)。c)在活动的onStop回调中取消所有任务(如果这是您再次想要做的)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接