Android异常:异步任务导致的窗口句柄泄漏问题
05-05 10:36:41.009: E/WindowManager(4243): Activity com.tao.MyActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@405241b0 that was originally added here
05-05 10:36:41.009: E/WindowManager(4243): android.view.WindowLeaked: Activity com.tao.MyActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@405241b0 that was originally added here
05-05 10:36:41.009: E/WindowManager(4243): at android.view.ViewRoot.<init>(ViewRoot.java:265)
05-05 10:36:41.009: E/WindowManager(4243): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:148)
05-05 10:36:41.009: E/WindowManager(4243): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
05-05 10:36:41.009: E/WindowManager(4243): at android.view.Window$LocalWindowManager.addView(Window.java:424)
05-05 10:36:41.009: E/WindowManager(4243): at android.app.Dialog.show(Dialog.java:241)
05-05 10:36:41.009: E/WindowManager(4243): at android.app.ProgressDialog.show(ProgressDialog.java:107)
05-05 10:36:41.009: E/WindowManager(4243): at android.app.ProgressDialog.show(ProgressDialog.java:95)
05-05 10:36:41.009: E/WindowManager(4243): at com.unifable.activity.MySecretaryActivity.onCreate(MySecretaryActivity.java:50)
05-05 10:36:41.009: E/WindowManager(4243): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
05-05 10:36:41.009: E/WindowManager(4243): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
05-05 10:36:41.009: E/WindowManager(4243): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
05-05 10:36:41.009: E/WindowManager(4243): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
05-05 10:36:41.009: E/WindowManager(4243): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
05-05 10:36:41.009: E/WindowManager(4243): at android.os.Handler.dispatchMessage(Handler.java:99)
05-05 10:36:41.009: E/WindowManager(4243): at android.os.Looper.loop(Looper.java:130)
05-05 10:36:41.009: E/WindowManager(4243): at android.app.ActivityThread.main(ActivityThread.java:3683)
05-05 10:36:41.009: E/WindowManager(4243): at java.lang.reflect.Method.invokeNative(Native Method)
05-05 10:36:41.009: E/WindowManager(4243): at java.lang.reflect.Method.invoke(Method.java:507)
05-05 10:36:41.009: E/WindowManager(4243): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:906)
05-05 10:36:41.009: E/WindowManager(4243): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:664)
05-05 10:36:41.009: E/WindowManager(4243): at dalvik.system.NativeStart.main(Native Method)
这是在做一个项目的时候遇到的问题:在第一界面的Activity中,为了避免程序假死带来的糟糕的用户体验,采用异步任务AsyncTask来访问网络,与服务器进行交互,并用
ProgressDialog控件来告知用户当前的程序进度。
在网上查了下别人的资料。才终于明白了原因。
上面的异常的意思是:存在窗口句柄的泄漏,即未能及时的销毁某个PhoneWindow.
为什么会出现这样的情况,因为,在异步任务里面已经发生了严重的错误,而导致Activity的强制关闭。Activity强制关闭了,可是ProgressDialog并没有dismiss()掉,所以出现了
窗口句柄的泄漏。 而且,更严重的是,这个异常会覆盖我们在AsyncTask里面发生的真正异常,这往往会误导我们,把过多的精力放在查找所谓的内存泄漏的上面,而不是查找AsyncTask
中出现的错误。
参照别人的解决方法:
本解决方法并不能真正的解决问题,但是在一定程度上可以将真正导致错误的异常信息显露出来。即重写Activity的onDestory()方法,在该方法中调用dismiss()来解除对ProgressDialog
的引用。
Android异常:异步任务导致的窗口句柄泄漏问题的更多相关文章
- Android异常一、异步任务导致的窗口句柄泄漏问题(转)
05-05 10:36:41.009: E/WindowManager(4243): Activity com.tao.MyActivity has leaked window com.android ...
- Android引导页过多导致OOM内存泄漏
摘要:前几天推广我们APP的时候,有些手机加载引导页的时候会闪退或崩溃,在Bugly显示是OOM异常. 然后Bugly上面显示的解决方案是: 该异常表示未能成功分配字节内存,通常是因为内存不足导 ...
- 5个Android开发中比较常见的内存泄漏问题及解决办法
android中一个对象已经不需要了,但是其他对象还持有他的引用,导致他不能回收,导致这个对象暂存在内存中,这样内存泄漏就出现了. 内存泄漏出现多了,会是应用占用过多的没存,当占用的内存超过了系统 ...
- Android异常分析(转)
关于异常 异常? 异常就是一种程序中没有预料到的问题,既然是没有预料到的,就可能不在原有逻辑处理范围内,脱离了代码控制,软件可能会出现各种奇怪的现象.比如:android系统常见异常现象有应用无响应. ...
- Android性能优化之常见的内存泄漏
前言 对于内存泄漏,我想大家在开发中肯定都遇到过,只不过内存泄漏对我们来说并不是可见的,因为它是在堆中活动,而要想检测程序中是否有内存泄漏的产生,通常我们可以借助LeakCanary.MAT等工具来检 ...
- 在Activity中使用Thread导致的内存泄漏
https://github.com/bboyfeiyu/android-tech-frontier/tree/master/issue-7/%E5%9C%A8Activity%E4%B8%AD%E4 ...
- Android 图片异步加载的体会,SoftReference已经不再适用
在网络上搜索Android图片异步加载的相关文章,目前大部分提到的解决方案,都是采用Map<String, SoftReference<Drawable>> 这样软引用的 ...
- Android图片异步加载之Android-Universal-Image-Loader
将近一个月没有更新博客了,由于这段时间以来准备毕业论文等各种事务缠身,一直没有时间和精力沉下来继续学习和整理一些东西.最近刚刚恢复到正轨,正好这两天看了下Android上关于图片异步加载的开源项目,就 ...
- Android图片异步加载之Android-Universal-Image-Loader(转)
今天要介绍的是Github上一个使用非常广泛的图片异步加载库Android-Universal-Image-Loader,该项目的功能十分强大,可以说是我见过的目前功能最全.性能最优的图片异步加载解决 ...
随机推荐
- HDU 5623 KK's Number (博弈DP)
KK's Number 题目链接: http://acm.hust.edu.cn/vjudge/contest/121332#problem/K Description Our lovely KK h ...
- My97DatePicker的calendar.js的反混淆
eval(string)函数 <script> eval(function(p, a, c, k, e, d) { p = 'function p(){console.log(" ...
- JodaTime用法简介
JodaTime用法简介 Java的Date和Calendar用起来简直就是灾难,跟C#的DateTime差距太明显了,幸好有JodaTime 本文简单罗列JodaTime的用法 package co ...
- codeforces 630D Hexagons!
D. Hexagons! time limit per test 0.5 seconds memory limit per test 64 megabytes input standard input ...
- Spring Data JPA教程, 第五部分: Querydsl(未翻译)
The fourth part of my Spring Data JPA tutorialdescribed how you can implement more advanced queries ...
- 对iOS中MVC的理解
总结于斯坦福大学的白头发老头的公开课 模型-控制器-视图(MVC)是一种将应用中给所有类组织起来的策略 模型(Model)实际上考虑的是“什么”的问题,即你的程序是什么? 以纸牌匹配游戏为例子,模型就 ...
- Oracle数据库文件恢复与备份思路
怎样才能对Oracle数据库进行备份?如何才能对删除的数据再进行恢复?这是困扰着很多人的问题.大家都知道,任何数据库在长期使用过程中,都会存在一定的安全隐患.对于数据库管理员来说不能仅寄希望于计算机操 ...
- 超级终端和SecureCRT进行Console口的连接
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html 内部邀请码:C8E245J (不写邀请码,没有现金送) 国 ...
- getDefinitionByName与ApplicationDomain.getDefinition
主swf 定义:MC,被加载swf 定义:MC.MC1 ①父SWF的应用程序域的新建子域 (默认方式)称其为应用程序域的继承 var app:ApplicationDomain=new Applica ...
- 【转】makefile语法规则
1.源程序的编译 在Linux下面,如果要编译一个C语言源程序,我们要使用GNU的gcc编译器. 下面我们以一个实例来说明如何使用gcc编译器. 假设我们有下面一个非常简单的 ...