我遇到了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