0

ボタン (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();
                            }

                    }
        }
4

1 に答える 1

0

あなたの場合、あなたが使用している、

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

エラーが発生しています。

エラー: アクティビティが変更された後に alert.show() を実行しようとしたため、アクティビティのウィンドウがリークしました。

AlertDialogエラーが示すように、これは、Activityis not ifを表示しようとしているためですForeground

于 2012-08-16T05:58:04.200 に答える