ボタン (cancelsync) をクリックしたときに Asynctask をキャンセルしたいのですが、onProgressUpdate() メソッドが実行され、アクティビティが変更された後に alert.show() を実行しようとすると、エラー: アクティビティがウィンドウにリークしました。したがって、cancelsync がクリックされた後にこの 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();
}
}
}