我正在更新AsyncTask的onPostexecute方法上的活动。但现在我发现并且错误。
如果我打开我的活动,然后在执行异步任务之前按回。应用程序死了,
现在这是有道理的,因为它会尝试更新已关闭jsut的活动。
如何解决此问题?
我可以在onPostExecute方法中进行检查吗?
我有一个包含多个片段的活动。每个片段都会启动自己的asynctask。
答案 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