2012-11-27 161 views
8

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

我已经试过

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

我也试过

asyncTaskObject.cancel(true); 

时,与事件相关的这工作特别。

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

这是什么方法?

回答

12

保持引用的AsyncTask对象实例变量,然后在的onDestroy()做到这一点

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

    super.onDestroy(); 
} 
+0

'mTask''' null' follow this http://stackoverflow.com/a/34586053/1318946 –

0

我不能完全肯定,当你想取消你的任务,但这里有一些建议:1)保持对正在运行的每个任务的引用。 b)在你的对话框中添加一个解雇监听器并取消所有任务(如果这是你想要做的)。 c)在onStop回调你的活动时取消所有任务(如果这是你想要做的事情)。