我有一個對話框,當您單擊我的活動中的圖像時會出現。當對話框打開,用戶旋轉屏幕,下面是我的logcat所示:Android:當旋轉屏幕和對話框打開時發生窗口泄漏
08-23 09:47:47.151: E/WindowManager(15589): Activity my.activity.MyActivity has leaked window [email protected] that was originally added here
08-23 09:47:47.151: E/WindowManager(15589): android.view.WindowLeaked: Activity my.activity.MyActivity has leaked window [email protected] that was originally added here
08-23 09:47:47.151: E/WindowManager(15589): at android.view.ViewRoot.<init>(ViewRoot.java:247)
08-23 09:47:47.151: E/WindowManager(15589): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:148)
08-23 09:47:47.151: E/WindowManager(15589): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
08-23 09:47:47.151: E/WindowManager(15589): at android.view.Window$LocalWindowManager.addView(Window.java:424)
08-23 09:47:47.151: E/WindowManager(15589): at android.app.Dialog.show(Dialog.java:241)
08-23 09:47:47.151: E/WindowManager(15589): at tip.machine.MyActivity$8.onClick(MyActivity.java:385)
08-23 09:47:47.151: E/WindowManager(15589): at android.view.View.performClick(View.java:2408)
08-23 09:47:47.151: E/WindowManager(15589): at android.view.View$PerformClick.run(View.java:8816)
08-23 09:47:47.151: E/WindowManager(15589): at android.os.Handler.handleCallback(Handler.java:587)
08-23 09:47:47.151: E/WindowManager(15589): at android.os.Handler.dispatchMessage(Handler.java:92)
08-23 09:47:47.151: E/WindowManager(15589): at android.os.Looper.loop(Looper.java:123)
08-23 09:47:47.151: E/WindowManager(15589): at android.app.ActivityThread.main(ActivityThread.java:4627)
08-23 09:47:47.151: E/WindowManager(15589): at java.lang.reflect.Method.invokeNative(Native Method)
08-23 09:47:47.151: E/WindowManager(15589): at java.lang.reflect.Method.invoke(Method.java:521)
08-23 09:47:47.151: E/WindowManager(15589): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
08-23 09:47:47.151: E/WindowManager(15589): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
08-23 09:47:47.151: E/WindowManager(15589): at dalvik.system.NativeStart.main(Native Method)
我所做的就是通過編寫Dialog dialog
全球申報的對話框,並在我的,我寫了這個:
@Override
protected void onPause() {
System.out.println("IN PAUSE!");
try {
dialog.dismiss();
System.out.println("IN TRY!");
}
catch (java.lang.NullPointerException exception) {System.out.println("IN CATCH!");}
super.onPause();
}
如果dialog
沒有實例化,我認爲catch塊會發現錯誤。無論如何,每次我旋轉,無論對話框是否打開,我只進入catch塊。當對話框打開並旋轉時,我會得到與上面相同的堆棧跟蹤(直接到catch塊)。所以它似乎從未嘗試過dialog.dismiss()
這就是爲什麼我仍然收到WindowLeaked
消息。
任何想法?一定是我的變量聲明/實例有問題。謝謝。
我同意你的變量聲明/實例化一定是錯誤的。你可以請張貼代碼嗎? – Samuel
@Samuel明白了,謝謝。如果你有興趣,請看我的答案。 – capcom