当我单击按钮(取消同步)时,我想取消 Asynctask,但执行了 onProgressUpdate() 方法并显示错误:活动已泄漏窗口,因为它在活动更改后尝试执行 alert.show()。那么在单击取消同步后我可以做些什么来停止这个 AsyncTask
CancelButton:
cancelsync.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
AlertDialog alert =new AlertDialog.Builder(NeliteMusicActivity.this).create();
alert.setTitle(R.string.set4Play);
alert.setMessage(getString(R.string.interrupted));
alert.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
alert.setButton(getString(R.string.yes), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
if(communicator != null && !communicator.isCancelled())
communicator.cancel(true);
Intent myintent = new Intent(NeliteMusicActivity.this,HomeScreen.class);
startActivity(myintent);
return;
}
});
alert.setCanceledOnTouchOutside(false);
alert.show();
isTrue = false;
}
});
AsyncTask:
class Communicator extends AsyncTask<String, String, String>
{
@Override
protected void onProgressUpdate(String... values) {
super.onProgressUpdate(values);
int a=messag;
progress.setProgress(a);
textsync.setText("Syncing mix "+c+"/"+list.size());
if(progress.getMax()<=a)
{
if (isOnline())
{
final AlertDialog alert =new AlertDialog.Builder(NeliteMusicActivity.this).create();
alert.setTitle(R.string.set4Play);
alert.setMessage(getString(R.string.updatedMix));
alert.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
alert.setButton(getString(R.string.ok),
new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int which) {
alert.dismiss();
animatedStartActivity();
}
});
alert.setCanceledOnTouchOutside(false);
alert.show();
}
if (!isOnline()) {
final AlertDialog alert =new AlertDialog.Builder(NeliteMusicActivity.this).create();
alert.setTitle(R.string.set4Play);
alert.setMessage(getString(R.string.connectionerror));
alert.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
alert.setButton(getString(R.string.ok), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
alert.dismiss();
animatedStartActivity();
}
});
alert.setCanceledOnTouchOutside(false);
alert.show();
}
}
}