推荐安卓开发神器(里面有各种UI特效和android代码库实例)

虽然是小问题一个,但也困扰了我一段时间,现在记下来,给自己做个备忘,也可以给其他人一个参考

view plaincopy to clipboardprint?01-08 01:49:27.874: ERROR/WindowManager(473): Activity com.photos.MainActivity has leaked window android.widget.ImageButton@43e40d10 that was originally added here  01-08 01:49:27.874: ERROR/WindowManager(473): android.view.WindowLeaked: Activity com.photos.MainActivity has leaked window android.widget.ImageButton@43e40d10 that was originally added here  01-08 01:49:27.874: ERROR/WindowManager(473):     at android.view.ViewRoot.<init>(ViewRoot.java:247)  01-08 01:49:27.874: ERROR/WindowManager(473):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:148)  01-08 01:49:27.874: ERROR/WindowManager(473):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)  01-08 01:49:27.874: ERROR/WindowManager(473):     at android.view.Window$LocalWindowManager.addView(Window.java:424)  01-08 01:49:27.874: ERROR/WindowManager(473):     at android.widget.PopupWindow.invokePopup(PopupWindow.java:828)  01-08 01:49:27.874: ERROR/WindowManager(473):     at android.widget.PopupWindow.showAtLocation(PopupWindow.java:688)  01-08 01:49:27.874: ERROR/WindowManager(473):     at com.photos.MainActivity.showCommonPopup(MainActivity.java:256)  01-08 01:49:27.874: ERROR/WindowManager(473):     at com.photos.MainActivity.access$3(MainActivity.java:255)  01-08 01:49:27.874: ERROR/WindowManager(473):     at com.photos.MainActivity$2.handleMessage(MainActivity.java:88)  01-08 01:49:27.874: ERROR/WindowManager(473):     at android.os.Handler.dispatchMessage(Handler.java:99)  01-08 01:49:27.874: ERROR/WindowManager(473):     at android.os.Looper.loop(Looper.java:123)  01-08 01:49:27.874: ERROR/WindowManager(473):     at android.app.ActivityThread.main(ActivityThread.java:4627)  01-08 01:49:27.874: ERROR/WindowManager(473):     at java.lang.reflect.Method.invokeNative(Native Method)  01-08 01:49:27.874: ERROR/WindowManager(473):     at java.lang.reflect.Method.invoke(Method.java:521)  01-08 01:49:27.874: ERROR/WindowManager(473):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)  01-08 01:49:27.874: ERROR/WindowManager(473):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)  01-08 01:49:27.874: ERROR/WindowManager(473):     at dalvik.system.NativeStart.main(Native Method)   


按字面了解,Window Leaked大概就是说一个窗体泄漏了,也就是我们常说的内存泄漏,为什么窗体会泄漏呢?

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

android.view.WindowLeaked一般会发生在Activity 与Dialog的显示。

Activity 中create 一个Dialog,若你先关闭Dialog再关闭Activity就是正常的,若你先关闭Activity再关闭Dialog就会报错这个android.view.WindowLeaked错误了。
分析这个原因是:Dialog是基于Activity而创建的:new ProgressDialog(this);this 就是Activity。 Activtity先finish,那Dialog就没得依附了,所以就会报android.view.WindowLeaked。




解决方法:
关闭(finish)某个Activity前,要确保附属在上面的Dialog或PopupWindow已经关闭(dismiss)了。
也可在OnCreateDialog()中创建Dialog,让系统去管理对话框

更多相关文章

  1. Android(安卓)APP优化—Android程序员必须掌握
  2. 内存泄漏—Android(安卓)Studio 3.0 Profiler入门
  3. Android(安卓)Studio 真机调试vivo系列手机安装失败处理
  4. android默认关闭Location服务及关闭锁屏功能
  5. Android(安卓)Handler导致内存泄漏的解决方案
  6. Android性能优化 之 布局优化
  7. Android(安卓)软键盘自动弹出和关闭
  8. android context 上下文
  9. android句柄泄漏

随机推荐

  1. mysql 5.7.18 winx64密码修改
  2. mysql5.7.17安装配置图文教程
  3. MySQL v5.7.18 解压版本安装详细教程
  4. mysql 5.7.18 安装教程及问题汇总
  5. CentOS6.8使用cmake安装MySQL5.7.18
  6. mysql 5.7.18 winx64安装配置方法图文教
  7. windows10安装mysql5.7.18教程
  8. MySQL 复制详解及简单实例
  9. mysql 5.7.18 winx64 免安装 配置方法
  10. InnoDB实现序列化隔离级别的方法