我遇到了AsyncTask的一些小问题。AsyncTask按下后退按钮时的任务
我把它实现如下
private class MakeConnection extends AsyncTask<String, Void, String> implements OnDismissListener{
Context context;
ProgressDialog myDialog;
public MakeConnection(Context conetext)
{
this.context = conetext;
myDialog = new ProgressDialog(this.context);
myDialog.setCancelable(true);
myDialog.setOnDismissListener(this);
}
@Override
protected String doInBackground(String... urls) {
//do stuff
}
@Override
protected void onPostExecute(String result) {
try {
myDialog.dismiss();
success(result);
}catch(JSONException e)
{
data = e.toString();
}
}
@Override
protected void onProgressUpdate(Void... values) {
myDialog = ProgressDialog.show(context, "Please wait...", "Loading the data", true);
}
@Override
public void onDismiss(DialogInterface dialog) {
this.cancel(true);
}
}
但是当过我按后退按钮没有任何反应,只是完成了任务,因为如果我不按后退按钮
知道为什么?
我现在有一个关于这个问题,我已经实现了你建议,但我想知道是必须捕获主UI线程中的后退按钮事件还是仅在AsyncTask onDesmiss方法中捕获?因为当我连接速度很慢时,我可以用当前实现取消AsyncTask – Armand
您应该在Activity的onDestroy()中取消“AsyncTask”。当任务被取消时,'onPostExecute()'不会被调用。在你的情况下,任务会停留一段时间,但是完成后,调用'AsyncTask.onCancelled()'(当然,你可以重写它)。你只应该在这个函数中小心(或者不要触及'onCancelled()')中的UI,因为它可以在Activity已经被销毁之后被调用。 – inazaruk
好吧,如果我将活动打开一段时间,然后屏幕锁定,然后解锁并继续使用它,并尝试使用AsyncTask启动一个新活动,它只是打开我的对话框而没有其他任何事情发生,为什么? – Armand