在我的主要活动中,我有一个AsyncTask
运行,如果我的活动由于任何原因而被破坏,那么在postExecute()
更新ListView.
之前postExecute()
会调用AyncTask
. onPostExecute()
UI 更新将引发异常。
我认为的一种方法是取消onDestory()
. 但是,如果异步任务在 postExecute 中,则在销毁时调用如何处理它。
在我的主要活动中,我有一个AsyncTask
运行,如果我的活动由于任何原因而被破坏,那么在postExecute()
更新ListView.
之前postExecute()
会调用AyncTask
. onPostExecute()
UI 更新将引发异常。
我认为的一种方法是取消onDestory()
. 但是,如果异步任务在 postExecute 中,则在销毁时调用如何处理它。
但是,如果异步任务在 postExecute 中,则在销毁时调用如何处理它。
这种情况根本不可能发生,因为这两个方法都是在 UI 线程上调用的,这意味着一个在调用另一个之前完成。
当您的 UI 不再可用时(在 中onDestroy
),取消您的AsyncTask
.
在onPostExecute
您可以检查的取消状态AsyncTask
。您也可以isFinishing
在Activity
.
一些你可以如何处理你的代码异常,你可以在 AsyncTask 中处理异常
public abstract class ExceptionAsyncTask<Params, Progress, Result> extends AsyncTask<Params, Progress, Result> {
private Exception exception=null;
private Params[] params;
@Override
final protected Result doInBackground(Params... params) {
try {
this.params = params;
return doInBackground();
}
catch (Exception e) {
exception = e;
return null;
}
}
abstract protected Result doInBackground() throws Exception;
@Override
final protected void onPostExecute(Result result) {
super.onPostExecute(result);
onPostExecute(exception, result);
}
abstract protected void onPostExecute(Exception exception, Result result);
public Params[] getParams() {
return params;
}
}