2013-10-21 45 views
0

我正在更新AsyncTask的onPostexecute方法上的活动。但是现在我发现了错误。在onPostExecute()运行之前活动关闭时从asyncTask错误更新活动

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

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

我该如何解决此问题?

有没有我可以在onPostExecute方法中做的检查?

我有一个活动,其中有多个片段。每个片段开始它自己的asynctask。

回答

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的状态,当你想要取消它。

+0

好吧,但现在我有一个问题,我有一个活动,其中有几个片段。并且每个片段都启动它自己的异步任务?但是现在我不得不在主要活动中关闭它们,当它的内部被称为?我将如何做到这一点? – Zapnologica

+0

活动将具有其片段的实例,并且片段将具有其asynctasks的实例。所以你可以使用相应的实例来取消它。 – prijupaul

+0

@prijupaul但我会在哪里取消它?在片段的onPause()方法? – Zapnologica

0

如果您在片段中运行任务。 isAdded()检查,如果你的当前片段连接到活动,如果不是你在getActivity得到NPE()调用

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

     } 
    } 

如果从活动运行的任务,你可以拿着活动引用作为任务字段,并检查是否不null onPostExecute,或者你可以持有一些标志,并切换它ib onStart和onStop

相关问题