0

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

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

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

我该如何解决这个问题?

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

我有一个包含多个片段的活动。每个片段都启动自己的异步任务。

4

2 回答 2

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

于 2013-10-21T16:03:50.457 回答
0

如果您在片段中运行任务。isAdded() 检查您当前的片段是否附加到活动,如果没有,您将在 getActivity() 调用中获得 NPE

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

       }
    }

如果您从活动运行任务,您可以将活动引用作为任务字段并检查 onPostExecute 中是否不为空,或者您可以持有一些标志并将其切换到 ib onStart 和 onStop

于 2013-10-21T21:42:09.600 回答