0

当我单击按钮(取消同步)时,我想取消 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();
                            }

                    }
        }
4

1 回答 1

0

在您使用的情况下,

communicator.cancel(true); // this is working fine

你得到错误,

错误:Activity 已泄漏窗口,因为它在 Activity 更改后尝试执行 alert.show()。

正如错误所说,这是因为您试图显示一段AlertDialog时间 your Activityis not if Foreground

于 2012-08-16T05:58:04.200 回答