2 回答
TA贡献1872条经验 获得超3个赞
解决方案 1
如果您正在从另一个活动完成,您可以尝试覆盖正在执行您的 AsyncTask 的活动上的 onDestroy() 方法。
@Override
protected void onDestroy() {
if(asyncTask != null) {
asyncTask.cancel(true);
}
super.onDestroy();
}
解决方案 2
或者,您可以开始下一个活动,startActivityForResult()并且您可以setResult()在调用finishAffinity(). 在上一个活动中,您需要通过覆盖onActivityResult()方法检查结果。检查您的结果是否在finishAffinity()调用时设置,您可以像这样调用取消方法:
if(asyncTask != null) {
asyncTask.cancel(true);
}
解决方案 3
您也可以使用观察者模式和事件总线从下一个活动触发事件并从上一个活动中捕获它。当事件触发时,您可以检测到它并取消您的asyncTask。
TA贡献1804条经验 获得超2个赞
您需要停止AsyncTask从onDestroy你的功能Activity。当Activity完成时,它应该AsyncTask使用它们的引用停止之前创建的。
让我们假设ActivityA已经开始以下AsyncTask。
// You might have started your AsyncTask like this
private YourAsyncTask mTask;
mTask = new YourAsyncTask().execute();
在您的onDestroy函数中ActivityA写入以下内容。
if(mTask != null) mTask.cancel(true);
希望有帮助!
添加回答
举报