我应该在哪里停止我的异步任务myAsync.cancel(true)

时间:2014-03-21 13:55:30

标签: android asynchronous android-fragments

我有几个片段,每个片段都有一个解除阻塞的异步调用,它会在其onPostExecute中更新UI。

问题是如果用户在async仍在执行时切换到其他片段,则会导致NullPointerException。

我尝试在每个片段的onDestroy中取消异步任务但仍然发生异常。什么是阻止我所有ASYNC的理想方法?

是片段的onDestroy ???

asyncTask.cancel(true);

请帮忙!

2 个答案:

答案 0 :(得分:0)

你真的想把它放在onPause中。 onDestroy无法保证被调用,onPause是最后一个地方。在onPause之后仍然没有加载GUI的充分理由。在AsyncTask开始onResume

来自activity lifecycle页面:

  

onPause()系统即将开始恢复上一个活动时调用。这通常用于提交未保存的持久数据更改,停止动画以及可能消耗CPU等的其他事情。

根据文档,这似乎是停止AsyncTask的最佳位置。

答案 1 :(得分:0)

您可以在AsyncTask方法中停止onPause()个对象。但是,AsyncTask方法返回后,onCancelled()对象的onPostExecute()doInBackground()方法仍会在UI线程上运行。您需要在onPostExecute()中设置保护代码,以确保您不会自动触及UI组件或操纵Fragment