在我的主要活动我有一个AsyncTask
运行这postExecute()
更新了ListView.
现在之前,如果我的行为被摧毁postExecute()
被调用因任何原因会是什么AyncTask
的状态。 onPostExecute()
UI更新会引发异常。状态下,当活动被销毁
我认为的一种方法是取消onDestory()
中的ayncTask。但是如果asynctask在postExecute中被销毁时被调用如何处理它。
在我的主要活动我有一个AsyncTask
运行这postExecute()
更新了ListView.
现在之前,如果我的行为被摧毁postExecute()
被调用因任何原因会是什么AyncTask
的状态。 onPostExecute()
UI更新会引发异常。状态下,当活动被销毁
我认为的一种方法是取消onDestory()
中的ayncTask。但是如果asynctask在postExecute中被销毁时被调用如何处理它。
一些美国可以如何处理üR代码里面除了这样,U可以在的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;
}
}
可以请你解释一下 – mSO
我们重写doInBackground在我们的子类中做后台工作,在需要的地方愉快地抛出异常。然后你被迫执行onPostExecute(因为它是抽象的),这轻轻地提醒你处理所有类型的Exception,它们作为参数传递。在大多数情况下,异常会导致某种类型的UI输出,所以onPostExecute是一个完美的地方。 – 2013-07-15 12:52:23
但如果是的AsyncTask在postExecute上破坏时被调用如何处理它。
这种情况根本就不会发生,因为这两种方法都是在UI线程上调用的,这意味着一个方法在调用另一个之前完成。
当您的用户界面不再可用时(在onDestroy
),取消您的AsyncTask
。您可以检查AsyncTask
的取消状态。您还可以在Activity
上查询isFinishing
。
downvoters请评论 – njzk2
你可以检查你的活动没有完成onPostExecute,只有更新UI,如果没有。 –
@ KunalS.Kushwah不,它不会! AsyncTask是一个后台运行进程,所以它的'doInbackground()'将会运行,尽管Activity被破坏了! –
@KenWolf如何检查? – mSO