【Android】常见异常 —— android.view.WindowLeaked 分析以及解决办法

问题虽小,不过不知道还是比较麻烦的。异常信息:

10-22 10:19:38.651  12723-12723/cn.com.zte.uc E/WindowManager﹕ android.view.WindowLeaked: Activity cn.com.zte.uc.activites.shipTicket.OrderWrite1 has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{423fee70 V.E..... R......D 0,0-455,230} that was originally added here
            at android.view.ViewRootImpl.<init>(ViewRootImpl.java:364)
            at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:258)
            at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
            at android.app.Dialog.show(Dialog.java:289)
            at cn.com.zte.uc.activites.BaseActivity.showInProgress(BaseActivity.java:147)
            at cn.com.zte.uc.activites.shipTicket.OrderWrite1.onClick(OrderWrite1.java:135)
            at android.view.View.performClick(View.java:4446)
            at android.view.View$PerformClick.run(View.java:18485)
            at android.os.Handler.handleCallback(Handler.java:733)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5262)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:851)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:667)
            at dalvik.system.NativeStart.main(Native Method)

直接从项目里面拷贝出来的,出错代码为show一个ProgressDialog。还有一种情况就是ProgressDialog还在显示的时候,finish activity也会出现。

原因分析:

Android的每一个Activity都有个WindowManager窗体管理器,同样,构建在某个Activity之上的对话框、PopupWindow也有相应的WindowManager窗体管理器。因为对话框、PopupWindown不能脱离Activity而单独存在着,所以当某个Dialog或者某个PopupWindow正在显示的时候我们去finish()了承载该Dialog(或PopupWindow)的Activity时,就会抛Window
Leaked异常了,因为这个Dialog(或PopupWindow)的WindowManager已经没有谁可以附属了,所以它的窗体管理器已经泄漏了。

解决办法:

关闭(finish)某个Activity前,要确保附属在上面的Dialog或PopupWindow已经关闭(dismiss)了。

时间: 2024-08-01 19:23:09

【Android】常见异常 —— android.view.WindowLeaked 分析以及解决办法的相关文章

android 常见死机问题--log分析

http://blog.csdn.net/fangchongbory/article/details/7645815 android 常见死机问题--log分析=================================================================================================== 一般在平时工作中,基本上很多代码可以在eclipse+ndk进行调试,但如果需要用到具体的硬件设备,如媒体播放设备无法模拟的情况下,只能上硬

android webview ZoomButtonsController 导致android.view.WindowLeaked 问题彻底解决

Activity has leaked window android.widget.ZoomButtonsController that was originally added here android.view.WindowLeaked: 引起这个错误的原因是: 发现是webview的 ZoomButton,也就是那两个放大和缩小的按钮,导致的.如果设置为让他们出现,并且可以自动隐藏,那么,由于他们的自动隐藏是一个渐变的过程,所以在逐渐消失的过程中如果调用了父容器的destroy方法,就会导

Xamarin开发Android时Visual Studio 2012没有智能提示解决办法

Most of the people who work with Xamarin’s Mono for Android in Visual Studio 2012 face a bug where Intellisense doesn’t work for AXML in source view. One of the fix which worked for me is mentioned below. Launch Visual Studio 2012 Open a solution wit

android DatePicker / TimePicker 占空间太大的解决办法

DatePicker 与 TimePicker 控件占用的空间是固定的,没有参数可以更改. 如果修改 length 和 width 属性,只会让控件被切割,显示将不完整.很多人说可以使用 scale 属性来放大或缩小 android:scaleX="0.8" android:scaleY="0.8" 这种方法虽然会缩小控件,但控件还是没法显示全. 找到的一个不错的解决办法是,用 Java 反射机制获取控件相关属性,然后修改.代码如下: Field[] fields

android viewpager fragment切换时界面卡顿解决办法

目前开发的程序在切换View时界面卡顿现象比较严重,影响用户体验,当前项目共就四个View,每个View也只是按钮,所以可以同时加载,不让其它view销毁. 只需在Adapter中重载destroyItem类即可 @Override public void destroyItem(ViewGroup container, int position, Object object) { //重载该方法,防止其它视图被销毁,防止加载视图卡顿 //super.destroyItem(container,

Android intent 传值不更新的原因和解决办法

当 Activity 的启动模式是 singleTask 或者 singleInstance 的时候.如果使用了 intent 传值,则可能出现 intent 的值无法更新的问题.也就是说每次 intent 接收到的值都是第一次接到的值.因为 intent 没有被更新.想要更新需要做两件事情. 1. 发送方 Activity,加上一句话 ? 1 PendingIntent pendingIntent = PendingIntent.getActivity(context,0,intent,Pen

Xamarin.Android 反复报 Please Download android_m2repository_rxx.zip 的解决办法

我原来一直用的是老版本的 Xamarin , android_m2repository_rxx.zip 早已在 C:\Users\XXX\AppData\Local\Xamarin\Android.Support.Design\XXX 中存在,所以更新最新的 Xamarin 后, 这一块都是没有任何问题的. 有园友反映这个 zip 明明已经放到了指定的文件夹中,但是还是会反复的 Please download XXXX. 1>C:\Program Files (x86)\MSBuild\Xama

Android 运行时报错Error running app: Instant Run requires &#39;Tools | Android | Enable ADB integration&#39; to be enabled. 的解决办法

解决方法:在菜单栏,Tools->Android->Enable ADB integration勾选就可以了. Android 运行时报错Error running app: Instant Run requires 'Tools | Android | Enable ADB integration' to be enabled. 的解决办法

Android Studio关于USB device not found的解决办法

Android Studio关于USB device not found的解决办法 我们使用Android Studio进行Android开发时,当我们使用真机进行调试时,很可能会出现USB device not found的问题.网上提出了很多决解办法,很多都是错误的.现给出正确的解决方法: 1. If yon don't have Android SDK installed, please install it first. 2. Open Start menu. Select Androi