[英]AsyncTask kill task when back button pressed
我在使用 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);
}
}
但是,当我按下后退按钮时,什么也没有发生,它只是完成了任务,就好像我没有按下后退按钮一样
知道为什么吗?
这个问题有两个部分:
1)以这种方式实现您的doInBackground()
,因此它会检查AsyncTask
是否被取消。
@Override
protected String doInBackground(String... urls) {
for(int i = 0; i < 100 && !isCancelled(); i++) {
//do some stuff
}
}
2) 您应该在 Activity 的onDestroy()
中调用asynTask.cancel(true)
) 。
这解决了我的问题
@Override
protected void onPreExecute(){
myDialog = ProgressDialog.show(
context,
"Please wait...",
"Loading the data",
true,
true,
new DialogInterface.OnCancelListener(){
@Override
public void onCancel(DialogInterface dialog) {
MakeConnection.this.cancel(true);
}
}
);
}
也可以在活动中使用以下方法
@Override
public void onBackPressed() {
// TODO Auto-generated method stub
super.onBackPressed();
imageLoadingAsyncTask.cancel(true);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.