我正在更新 AsyncTask 的 onPostexecute 方法上的活动。但现在我发现了错误。
如果我打开我的活动,然后在异步任务执行之前按回。该应用程序死了,
现在这是有道理的,因为它将尝试更新已关闭的活动。
我该如何解决这个问题?
我可以在 onPostExecute 方法中进行检查吗?
我有一个包含多个片段的活动。每个片段都启动自己的异步任务。
我正在更新 AsyncTask 的 onPostexecute 方法上的活动。但现在我发现了错误。
如果我打开我的活动,然后在异步任务执行之前按回。该应用程序死了,
现在这是有道理的,因为它将尝试更新已关闭的活动。
我该如何解决这个问题?
我可以在 onPostExecute 方法中进行检查吗?
我有一个包含多个片段的活动。每个片段都启动自己的异步任务。
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
}
}
如果您从活动运行任务,您可以将活动引用作为任务字段并检查 onPostExecute 中是否不为空,或者您可以持有一些标志并将其切换到 ib onStart 和 onStop