2012-10-16 8 views
0

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

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 [email protected] 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) 
+0

您显示一个对话框然后更改活动,您需要首先关闭对话框 – Blundell

回答

0

保存AlertDialog给一个变量:

myAlertDialog =新AlertDialog.Builder(本).....

并在的onPause ()方法,如果对话框处于活动状态,则应该解除它!

+0

正确!我可以有相同的结果从onDestroy调用dismiss方法吗? – GVillani82

+0

我按照你的说法试过,但错误依然存在。 – GVillani82

2

它继续执行,因为这就是你告诉它要做的事情。如果要在解除对话框时执行代码,请将其放入对话框按钮的onClickonDismiss(如果可用)。

更重要的是,为什么这个在onDestroy()中的任何一个呢?这似乎是一个非常糟糕的地方(或99.8%的时间内打电话给另一个活动的意图)。你将永远无法看到它,活动正在被破坏现在。我建议重新考虑你的程序流程。

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){ 

    } 
相关问题