1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
02-19 15:08:02.228: E/WindowManager(22172): Activity com.test.activity.TestActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@427bebc8 that was originally added here
02-19 15:08:02.228: E/WindowManager(22172): android.view.WindowLeaked: Activity com.test.activity.TestActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@427bebc8 that was originally added here
02-19 15:08:02.228: E/WindowManager(22172):     at android.view.ViewRootImpl.<init>(ViewRootImpl.java:438)
02-19 15:08:02.228: E/WindowManager(22172):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:292)
02-19 15:08:02.228: E/WindowManager(22172):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:224)
02-19 15:08:02.228: E/WindowManager(22172):     at android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:149)
02-19 15:08:02.228: E/WindowManager(22172):     at android.view.Window$LocalWindowManager.addView(Window.java:558)
02-19 15:08:02.228: E/WindowManager(22172):     at android.app.Dialog.show(Dialog.java:316)
02-19 15:08:02.228: E/WindowManager(22172):     at com.test.activity.TestActivity.onError(TestActivity.java:326)
02-19 15:08:02.228: E/WindowManager(22172):     at android.media.MediaPlayer$EventHandler.handleMessage(MediaPlayer.java:2113)
02-19 15:08:02.228: E/WindowManager(22172):     at android.os.Handler.dispatchMessage(Handler.java:99)
02-19 15:08:02.228: E/WindowManager(22172):     at android.os.Looper.loop(Looper.java:137)
02-19 15:08:02.228: E/WindowManager(22172):     at android.app.ActivityThread.main(ActivityThread.java:4881)
02-19 15:08:02.228: E/WindowManager(22172):     at java.lang.reflect.Method.invokeNative(Native Method)
02-19 15:08:02.228: E/WindowManager(22172):     at java.lang.reflect.Method.invoke(Method.java:511)
02-19 15:08:02.228: E/WindowManager(22172):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:804)
02-19 15:08:02.228: E/WindowManager(22172):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:571)
02-19 15:08:02.228: E/WindowManager(22172):     at dalvik.system.NativeStart.main(Native Method)

这是我在播放视频弹出Dialog时,出现的异常。

分析:

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

问题原因:

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

解决方法之一:

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

另外引出的一个异常

Unable to add window -- token android.os.BinderProxy@42f10c40 is not valid; is your activity running?

因为使用了线程,在线程完成以后弹出窗口。
这个时候如果用户在线程未执行完 按了返回按钮,activity已经onDestory了,
那么就会报出android.view.WindowManager$BadTokenException: Unable to add window -- token android.os.BinderProxy@4479b390 is not valid; is your activity running?

解决方法一在弹出窗口之前用Activity的isFinishing判断一下Activity是否还存在。

1
2
3
if (!Activity.isFinishing() && !dialog.isShowing()) {
      dialog.show();
}

 

【转】Android异常:that was originally added here的更多相关文章

  1. Android Activity has leaked window that was originally added

    今天调试程序时log中突然打印这样的错误,但是程序并没有crash,为了不放过一个错误,我决定调查一下. 当时是离开一个activity,然后提示是否退出此界面,接下来就打印此错误: - ::): A ...

  2. Android异常一、异步任务导致的窗口句柄泄漏问题(转)

    05-05 10:36:41.009: E/WindowManager(4243): Activity com.tao.MyActivity has leaked window com.android ...

  3. Android异常:异步任务导致的窗口句柄泄漏问题

    05-05 10:36:41.009: E/WindowManager(4243): Activity com.tao.MyActivity has leaked window com.android ...

  4. Activity has leaked window that was originally added

    错误: E/WindowManager: android.view.WindowLeaked: Activity com.x.x.x has leaked window com.android.int ...

  5. decorview that was originally added here or java.lang.IllegalArgumentException: View not attached to window manager

    使用Dialog的时候,没少出现下面这两个报错 12-11 17:47:49.776: E/WindowManager(11461): android.view.WindowLeaked: Activ ...

  6. Activity has leaked window that was originally added(以解决)

     在编写Android程序的时候,遇到一个隐藏性问题.仔细查看LogCat,错误信息如下: 10-31 13:03:34.549: ERROR/WindowManager(444): Activi ...

  7. Android异常:唤醒锁未授权。(Caused by: java.lang.SecurityException: Neither user 10044 nor current process has android.permission.WAKE_LOCK.)

    Android异常:Caused by: java.lang.SecurityException: Neither user 10044 nor current process has android ...

  8. Android异常分析(转)

    关于异常 异常? 异常就是一种程序中没有预料到的问题,既然是没有预料到的,就可能不在原有逻辑处理范围内,脱离了代码控制,软件可能会出现各种奇怪的现象.比如:android系统常见异常现象有应用无响应. ...

  9. Android异常:android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original

    Android异常:android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that cr ...

随机推荐

  1. LFS实践

    用了三天,编译了两次LFS,把LFS的基本流程和原理都弄清了.用的是LFS 6.3,使用的教程是LFS速成手册(6.3) ,感觉很不错,如果按照它的做法,一步一步来,基本都能编译成功而且没什么错误.不 ...

  2. 关于django Models的个人理解和related_name的使用

    作为一个新人(刚刚大学还没有毕业就出来实习,可以说是真的什么都不知到,什么都要重新学,但是这样真的可以锻炼自己的意志力和能力).现在在公 司是前端和后端一起坐,所以要学的东西是真的多的让人想不到.在学 ...

  3. jquery mobile backbone

    http://www.appliness.com/getting-started-with-html-mobile-application-development-using-jquery-mobil ...

  4. spring 属性配置细节

    1.使用构造器注入属性值可以指定参数的位置和参数的类型!以区分重载的构造器.例如:<constructor-arg value="" type="java.lang ...

  5. PS命令删除所有EXCHANGE2013内用户邮件

    因为在测试的时间产生了大量测试邮件,所以在正式上线前,要删除所有用户的邮件. 命令如下: Get-Mailbox | Search-Mailbox  -DeleteContent

  6. 查看Mac OSX机器上存在的所有Device

    可以使用instruments -s来查看Mac OSX机器上存在的所有Device,包括模拟器创建的Device以及真实连接的iPad,iPhone等设备.

  7. 【Xamarin挖墙脚系列:配置Mac之间的连接问题】

    原文:[Xamarin挖墙脚系列:配置Mac之间的连接问题] 首先建议把MAC的防火墙关掉,呵呵, 其次,去设置里,允许所有用户远程登录连接MAC

  8. Service知识点总结

    转载请注明出处:http://blog.csdn.net/krislight/article Service可以看作一个后台服务,但并非是开启另外的线程,Service还是在主线程中运行.所以需避免耗 ...

  9. Webx之表单验证

    引入服务器端表单验证service,是通过在webx.xml中通过服务引入的方式完成的.例如,在user相关信息的表单验证的产生过程是这样的:webx-user.xml通过 <beans:imp ...

  10. Android4.0 -- UI控件之 Menu 菜单的的使用(二)

    上一讲我们讲解了android中在代码或者xml文件中定义菜单,这一讲我们继续来讲解一下定义菜单的其他方式:创建上下文的菜单.查看API文档 Menus :Creating Contextual Me ...