我正在更新AsyncTask的onPostexecute方法上的活动。但是现在我发现了错误。在onPostExecute()运行之前活动关闭时从asyncTask错误更新活动
如果我打开我的活动,然后在执行异步任务之前按回。该应用程序死亡,
现在这是有道理的,因为它会尝试更新jsut已关闭的活动。
我该如何解决此问题?
有没有我可以在onPostExecute方法中做的检查?
我有一个活动,其中有多个片段。每个片段开始它自己的asynctask。
我正在更新AsyncTask的onPostexecute方法上的活动。但是现在我发现了错误。在onPostExecute()运行之前活动关闭时从asyncTask错误更新活动
如果我打开我的活动,然后在执行异步任务之前按回。该应用程序死亡,
现在这是有道理的,因为它会尝试更新jsut已关闭的活动。
我该如何解决此问题?
有没有我可以在onPostExecute方法中做的检查?
我有一个活动,其中有多个片段。每个片段开始它自己的asynctask。
getStatus()检查AsyncTask是否挂起,正在运行或已完成。
AsyncTask lmib = new AsyncTask();
if(lmib.getStatus() == AsyncTask.Status.PENDING){
// My AsyncTask has not started yet
}
if(lmib.getStatus() == AsyncTask.Status.RUNNING){
// My AsyncTask is currently doing work in doInBackground()
}
if(lmib.getStatus() == AsyncTask.Status.FINISHED){
// My AsyncTask is done and onPostExecute was called
}
在你onBackPressed()方法检查的AsyncTask的状态,当你想要取消它。
如果您在片段中运行任务。 isAdded()检查,如果你的当前片段连接到活动,如果不是你在getActivity得到NPE()调用
@Override
protected void onPostExecute(Object result){
if (isAdded()){
// update fragment UI here
}
}
如果从活动运行的任务,你可以拿着活动引用作为任务字段,并检查是否不null onPostExecute,或者你可以持有一些标志,并切换它ib onStart和onStop
好吧,但现在我有一个问题,我有一个活动,其中有几个片段。并且每个片段都启动它自己的异步任务?但是现在我不得不在主要活动中关闭它们,当它的内部被称为?我将如何做到这一点? – Zapnologica
活动将具有其片段的实例,并且片段将具有其asynctasks的实例。所以你可以使用相应的实例来取消它。 – prijupaul
@prijupaul但我会在哪里取消它?在片段的onPause()方法? – Zapnologica