【转】Android异常:that was originally added here
2015-12-07 11:34
483 查看
分析:
经常在应用中需要处理一些耗时的工作,诸如读取大文件、访问网络资源等。为了避免因程序假死而带来的糟糕用户体验,通常我们可以通过线程+Handler或者Android提供的AsyncTask来解决该问题,并一般以ProgressDialog等提示性控件来告知用户当前的程序进度。而标题中描述的异常则会常常出现在这样的场景中,并且往往掩盖了导致异常的真正的罪魁祸首。
问题原因:
从异常描述中,大致的意思是存在窗口句柄泄露,即未能及时销毁某个PhoneWindow。而这往往误导了我们,把过多的精力放在查找所谓的内存泄露上了。其实存在这么一种情况,即因我们在非主线程中的某些操作不当而产生了一个严重的异常,从而强制当前Activity被关闭。而在关闭的同时,却没能及时的调用dismiss来解除对ProgressDialog等的引用,从而系统抛出了标题中的错误,而掩盖了真正导致这个错误的异常信息。
解决方法之一:
本解决方法并不能真正的解决问题,但是在一定程度上可以将真正导致错误的异常信息显露出来。即重写Activity的onDestroy方法,在方法中调用dismiss来解除对ProgressDialog等的引用。
另外引出的一个异常
Unabletoaddwindow--tokenandroid.os.BinderProxy@42f10c40isnotvalid;isyouractivityrunning?
因为使用了线程,在线程完成以后弹出窗口。
这个时候如果用户在线程未执行完按了返回按钮,activity已经onDestory了,
那么就会报出android.view.WindowManager$BadTokenException:Unabletoaddwindow--tokenandroid.os.BinderProxy@4479b390isnotvalid;isyouractivityrunning?
解决方法一在弹出窗口之前用Activity的isFinishing判断一下Activity是否还存在。
相关文章推荐
- android canvas paint绘制相关图形
- Android学习笔记——动画(Animation)
- AndroidManifest.xml文件supports-screens详解
- android(30)(短信助手,intent和activity数据的回传startActivityForResult)
- Android实践项目汇报总结(下)
- Android获取音乐文件的信息
- 如何获取媒体库中所有音频文件信息,并在文件增删后及时更新媒体库
- Android利用canvas画各种图形(点、直线、弧、圆、椭圆、文字、矩形、多边形、曲线、圆角矩形)
- Android string.xml 显示特殊符号
- android BaseColumns的用处
- Android_(自定义view_1之牛刀小试)
- Android支付平台集成调研
- 自定义Dialog
- Android 最火的快速开发框架XUtils
- android中的aidl进程间通信
- Gradle 导入错误
- Android开发时尽管已root但是ddms还是没有data路径怎么办
- 引路蜂Android游戏编程教程
- ANDROID.JAVA常用参考资料网址
- Android Handler Leak