【问题标题】:Dialog error after killing activity in Android application杀死 Android 应用程序中的活动后出现对话框错误
【发布时间】:2012-10-16 13:49:24
【问题描述】:

我在 Activity example.activity.SetupManage 中。经过一些操作后,我调用了一个显示通知消息的对话框。但即使我不点击 OK 按钮,所有后续代码都会执行,所以当我杀死所有 Activity 时,对话框会产生问题。我可以做些什么来解决我的问题?

    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)

【问题讨论】:

  • 你显示一个对话框然后改变活动,你需要先关闭对话框

标签: android multithreading android-activity dialog


【解决方案1】:

它会继续执行,因为这就是您要它执行的操作。如果您希望在关闭对话框时执行代码,请将其放在对话框按钮的onClick 中,如果有的话,请将其放在onDismiss 中。

更重要的是,为什么 onDestroy() 首先会出现这种情况?放置对话框(或 99.8% 的时间调用另一个活动的意图)似乎是一个非常糟糕的地方。您将永远无法看到它,该活动正在被销毁现在。我建议重新考虑您的程序流程。

【讨论】:

    【解决方案2】:
    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){
    
        }
    

    【讨论】:

      【解决方案3】:

      将 AlertDialog 保存到变量中:

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

      在 onPause() 方法中,如果对话框处于活动状态,则应将其关闭!

      【讨论】:

      • 对!我可以从 onDestroy 调用dismiss 方法得到相同的结果吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-15
      • 1970-01-01
      • 1970-01-01
      • 2013-08-05
      相关资源
      最近更新 更多