0

私はActivityexample.activity.SetupManageにいます。いくつかの操作の後、通知メッセージを表示するダイアログを呼び出します。ただし、[OK]ボタンをクリックしなくても、後続のすべてのコードが実行されるため、すべてのアクティビティを強制終了すると、ダイアログで問題が発生します。問題を解決するために何ができますか?

    AlertDialog myAlertDialog;
    public void onDestroy(Bundle savedInstanceState){

    if(myAlertDialog.isShowing())
        myAlertDialog.dismiss();
}
  // *** some operations *** //
  try{
        myAlertDialog = new AlertDialog.Builder(this)
        .setTitle("Notification")
        .setMessage("Operation Failed")
        .setPositiveButton("OK", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {

        }
    })
    .show();

    }
    catch(Exception ex){

    }

    try{
    Intent myIntent = new Intent();
    myIntent.setClassName("example.activity", "example.activity.MainActivity");
    myIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|
            Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(myIntent);
    }catch(Exception ex){

    }

エラーメッセージ:

   10-16 15:33:11.120: E/WindowManager(4360): Activity example.activity.SetupManage has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@415ca638 that was originally added here
   10-16 15:33:11.120: E/WindowManager(4360):   at example.activity.SetupManage.CleanDatabase(SetupManage.java:61)
   10-16 15:33:11.120: E/WindowManager(4360):   at android.view.ViewRoot.<init>(ViewRoot.java:288)
   10-16 15:33:11.120: E/WindowManager(4360):   at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:249)
   10-16 15:33:11.120: E/WindowManager(4360):   at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:193)
   10-16 15:33:11.120: E/WindowManager(4360):   at android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:118)
   10-16 15:33:11.120: E/WindowManager(4360):   at android.view.Window$LocalWindowManager.addView(Window.java:532)
   10-16 15:33:11.120: E/WindowManager(4360):   at android.app.Dialog.show(Dialog.java:269)
   10-16 15:33:11.120: E/WindowManager(4360):   at android.app.AlertDialog$Builder.show(AlertDialog.java:907)
   10-16 15:33:11.120: E/WindowManager(4360):   at example.activity.SetupManage.CleanDatabase(SetupManage.java:61)
4

3 に答える 3

2

それはあなたがそうするように言っているので、実行し続けます。onClickダイアログを閉じたときにコードを実行する場合は、ダイアログ ボタンの中に配置するか、可能であればコードを実行しonDismissます。

onDestroy()さらに重要なことに、そもそもなぜこれが含まれているのでしょうか。ダイアログ (または 99.8% の確率で別のアクティビティを呼び出すインテント) を配置するのは非常に悪い場所のようです。あなたはそれを見ることができなくなります.活動は現在破壊されています. プログラムの流れを再考することをお勧めします。

于 2012-10-16T14:12:54.547 に答える
1
Replace this code , it can help you...pass getApplication context 

 try{
        myAlertDialog = new AlertDialog.Builder(getApplicationContext() )
        .setTitle("Notification")
        .setMessage("Operation Failed")
        .setPositiveButton("OK", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {

        }
    })
    .show();

    }
    catch(Exception ex){

    }
于 2012-11-19T11:04:31.213 に答える
0

AlertDialog を変数に保存します。

myAlertDialog=new AlertDialog.Builder(this).....

onPause() メソッドでは、ダイアログがアクティブな場合は、それを閉じる必要があります。

于 2012-10-16T13:51:53.223 に答える