在onPostExecute()运行之前活动关闭时,从asyncTask错误更新活动

时间:2013-10-21 15:54:51

标签: android android-asynctask

我正在更新AsyncTask的onPostexecute方法上的活动。但现在我发现并且错误。

如果我打开我的活动,然后在执行异步任务之前按回。应用程序死了,

现在这是有道理的,因为它会尝试更新已关闭jsut的活动。

如何解决此问题?

我可以在onPostExecute方法中进行检查吗?

我有一个包含多个片段的活动。每个片段都会启动自己的asynctask。

2 个答案:

答案 0 :(得分:2)

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的状态,并在需要时取消它。

答案 1 :(得分:0)

如果你在片段中运行任务。 isAdded()检查你当前的片段是否附加到activity,如果不是你将在getActivity()调用上获得NPE

    @Override
    protected void onPostExecute(Object result){
       if (isAdded()){
          // update fragment UI here  

       }
    }

如果你从活动中运行任务,你可以将活动参考作为任务字段保存,并检查onPostExecute中是否为空,或者你可以保留一些标志并将其切换为on on onStart和onStop