Android Async任务取消/停止

时间:2012-11-27 13:14:29

标签: android events android-asynctask

我想知道停止异步任务运行的最佳方法是什么。

我试过了

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

我也试过

asyncTaskObject.cancel(true);

这与事件相关时特别有用。

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

出于此目的的方法是什么?

3 个答案:

答案 0 :(得分:16)

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

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

    super.onDestroy();
}

答案 1 :(得分:3)

http://developer.android.com/reference/android/os/AsyncTask.html中有一个名为Threading规则的会话,它说必须在UI线程上创建AsyncTasks实例,并且必须在UI线程上调用execute。如果从UI线程调用execute,则可以取消调用yourTaskInstance.cancel的线程(true);

答案 2 :(得分:0)

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