Android排错:has leaked window com.android.internal.policy.impl.PhoneWindow$ that was originally added

 异常场景:

经常在应用中需要处理一些耗时的工作,诸如读取大文件、访问网络资源等。为了避免因程序假死而带来的糟糕用户体验,通常我们可以通过线程+Handler或者Android提供的AsyncTask来解决该问题,并一般以ProgressDialog等提示性控件来告知用户当前的程序进度。而标题中描述的异常则会常常出现在这样的场景中,并且往往掩盖了导致异常的真正的罪魁祸首。

 

问题原因:

从异常描述中,大致的意思是存在窗口句柄泄露,即未能及时销毁某个PhoneWindow。而这往往误导了我们,把过多的精力放在查找所谓的内存泄露上了。其实存在这么一种情况,即因我们在非主线程中的某些操作不当而产生了一个严重的异常,从而强制当前Activity被关闭。而在关闭的同时,却没能及时的调用dismiss来解除对ProgressDialog等的引用,从而系统抛出了标题中的错误,而掩盖了真正导致这个错误的异常信息。

 

解决方法之一:

本解决方法并不能真正的解决问题,但是在一定程度上可以将真正导致错误的异常信息显露出来。即重写Activity的onDestroy方法,在方法中调用dismiss来解除对ProgressDialog等的引用。

时间: 2025-01-19 18:55:08

Android排错:has leaked window com.android.internal.policy.impl.PhoneWindow$ that was originally added的相关文章

Android failed creating starting window

/***************************************************************************** * Android failed creating starting window * 声明: * 最近正在整的一个App在logcat中总是报这种异常,貌似也不影响程序的运行,但 * 每次都看到这种异常实在是难受,于是还是查点资料解决了去吧. * * 2016-5-5 深圳 南山平山村 曾剑锋 **********************

android源码探索之定制android关机界面的方法_Android

本文实例讲述了android源码探索之定制android关机界面的方法.分享给大家供大家参考.具体如下: 在Android系统中,长按Power键默认会弹出对话框让你选择"飞行模式","静音","关机"等功能.如下图所示: 但这些功能都对Android-x86和其他终端产品就没什么必要了.本文就简单介绍下如何定制关机界面. 我的目标是长按Power键,将会关机,弹出"设备将要关机"选择对话框.如果可以选择"是&quo

android源码探索之定制android关机界面的方法

本文实例讲述了android源码探索之定制android关机界面的方法.分享给大家供大家参考.具体如下: 在Android系统中,长按Power键默认会弹出对话框让你选择"飞行模式","静音","关机"等功能.如下图所示: 但这些功能都对Android-x86和其他终端产品就没什么必要了.本文就简单介绍下如何定制关机界面. 我的目标是长按Power键,将会关机,弹出"设备将要关机"选择对话框.如果可以选择"是&quo

ActivityGroup中出现的Unable to add window -- token android.app.LocalActivityManager$LocalActivityRecord@

原文:http://blog.csdn.net/fxtxz2/article/details/7921131 08-29 15:46:14.930: E/AndroidRuntime(28804): android.view.WindowManager$BadTokenException: Unable to add window -- token android.app.LocalActivityManager$LocalActivityRecord@40603cc0 is not valid

Android简明开发教程四:Android应用基本概念

Android平台的一个显著的特点是"低耦合".Activity是Android应用的一个最基本的用户UI模块.如果采用Windows Form 应用作为参照,Activity相当于Windows中的WinForm.和Windows 应用不同的是,运行一个Activity或是Activity之间的交互是 通过消息来实现的.也就是说如果想在起动一个Activity或是在一个Activity中启动另一个Activity,是通过发送Intent消息来 触发,而不像Windows WinFor

最新版Android Studio V2.2.2版本[Android Studio v2.2.2 (October 2016)]分享

最新版Android Studio V2.2.2版本[Android Studio v2.2.2 (October 2016)]分享 最新版Android Studio V2.2.2版本百度云下载:http://pan.baidu.com/s/1kVsGZkV 黏贴下官网的Release Notes: Revisions The sections below provide notes about successive releases of Android Studio, as denoted

[Android 泥水匠] Android基础 之一:浅谈Android架构到HelloWorld案例的剖析

1.1前言   泥瓦匠又和大家见面了,在移动平台干过原生态开发,也干过hybrid应用.可以看看相关的文章 Android UI .所以多多少少在这块还是有点了解.现在很多高级语言可以开发app程序,包括Android,到我觉得目前Java语言开发Android程序还是很火,很重要的.自然,Java的底子不可少.可以看看泥瓦匠写的不少基础 Java Basic .   我们生活在一个通讯的时代,我经历过得2.5G时代,也就是GPRS等的时代,前面还有2G(GSM等).1G,后面则大家熟悉的3G

Android项目从Eclipse增加支持Android Studio

使用Eclipse开发Android已经有些年头了,然而Android Studio(后面简称AS)为谷歌自己推的IDE.现在AS已经出了2.0版本,其功能的确要比Eclipse要多. AS对硬件要求较高,Eclipse使用ADT插件也是简单易用.本文不对这2个IDE的优缺点进行阐述,没有哪个一定能完全替代哪一个这么一说,选择自己喜欢的就好. 不过博主喜欢接触新事务,AS都出这么久了,也该拿出来遛遛了.对于一直使用Eclipse开发的安卓项目如何转换增加支持AS.(是增加支持AS,处理后AS和E

Android技术进阶的要素之Android属性动画

由于Android3.0之前就有了许多的动画框架,其中之一就是Animation,但是随着时代的发展和交互要求的提高,Animation的局限性也越来越明显,例如:Anmiation动画不能响应点击事件等等.因此,在Android3.0之后,Google推出了新的动画框架--属性动画(Animator). 而在Animator框架中使用最多的就是AnimatorSet和ObjectAnimator的配合,使用ObjectAnimator进行更加精细化的控制,只控制一个对象的一个属性值,而使用多个