Android Activity has leaked window that was originally added

Posted 星辰

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android Activity has leaked window that was originally added相关的知识,希望对你有一定的参考价值。

今天调试程序时log中突然打印这样的错误,但是程序并没有crash,为了不放过一个错误,我决定调查一下。

当时是离开一个activity,然后提示是否退出此界面,接下来就打印此错误:

03-08 18:02:48.521: E/WindowManager(6340): Activity com.linc.megatron.activity.ExamActivity has leaked window com.android.internal[email protected] that was originally added here
03-08 18:02:48.521: E/WindowManager(6340): android.view.WindowLeaked: Activity com.linc.megatron.activity.ExamActivity has leaked window com.android.internal[email protected] that was originally added here
03-08 18:02:48.521: E/WindowManager(6340):     at android.view.ViewRoot.<init>(ViewRoot.java:264)
03-08 18:02:48.521: E/WindowManager(6340):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:148)
03-08 18:02:48.521: E/WindowManager(6340):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
03-08 18:02:48.521: E/WindowManager(6340):     at android.view.Window$LocalWindowManager.addView(Window.java:424)
03-08 18:02:48.521: E/WindowManager(6340):     at android.app.Dialog.show(Dialog.java:241)
03-08 18:02:48.521: E/WindowManager(6340):     at com.linc.megatron.base.BackKeyActivity.showDialog(BackKeyActivity.java:76)
03-08 18:02:48.521: E/WindowManager(6340):     at com.linc.megatron.base.BackKeyActivity.onKeyDown(BackKeyActivity.java:62)
03-08 18:02:48.521: E/WindowManager(6340):     at android.view.KeyEvent.dispatch(KeyEvent.java:1256)
03-08 18:02:48.521: E/WindowManager(6340):     at android.app.Activity.dispatchKeyEvent(Activity.java:2078)
03-08 18:02:48.521: E/WindowManager(6340):     at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1709)
03-08 18:02:48.521: E/WindowManager(6340):     at android.view.ViewRoot.deliverKeyEventToViewHierarchy(ViewRoot.java:2628)
03-08 18:02:48.521: E/WindowManager(6340):     at android.view.ViewRoot.handleFinishedEvent(ViewRoot.java:2603)
03-08 18:02:48.521: E/WindowManager(6340):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1875)
03-08 18:02:48.521: E/WindowManager(6340):     at android.os.Handler.dispatchMessage(Handler.java:99)
03-08 18:02:48.521: E/WindowManager(6340):     at android.os.Looper.loop(Looper.java:123)
03-08 18:02:48.521: E/WindowManager(6340):     at android.app.ActivityThread.main(ActivityThread.java:3687)
03-08 18:02:48.521: E/WindowManager(6340):     at java.lang.reflect.Method.invokeNative(Native Method)
03-08 18:02:48.521: E/WindowManager(6340):     at java.lang.reflect.Method.invoke(Method.java:507)
03-08 18:02:48.521: E/WindowManager(6340):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
03-08 18:02:48.521: E/WindowManager(6340):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
03-08 18:02:48.521: E/WindowManager(6340):     at dalvik.system.NativeStart.main(Native Method)

显然,我用Dialog确认是否退出,但是activity销毁后并没有处理Dialog的退出。 

解决办法:

知道了问题所在就容易解决问题了。只需要在activity销毁时关闭Dialog就好。

    @Override
    protected void onDestroy() {
        if(mDialog != null) {
            mDialog.dismiss();
        }
        super.onDestroy();
    }

 

以上是关于Android Activity has leaked window that was originally added的主要内容,如果未能解决你的问题,请参考以下文章

Activity has leaked window that was originally added

(原)android系统下绑定Server的时候报MainActivity has leaked ServiceConnection的错误

Activity has leaked window 原来是加了logcat错误

Android 模拟器向 logcat 发送垃圾邮件,内容为“Service com.android.exchange.ExchangeService has leaked ServiceConnec

has leaked ServiceConnection com.baidu.location.LocationClient

Android VideoView中SubtitleController Leak(泄漏)