异常场景:

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

问题原因:

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

解决方法之一:

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

更多相关文章

  1. Android中UI卡顿相关知识点
  2. Android: 记一次Android内存泄露
  3. 避免Drawable保持引用的内存泄露
  4. Android(安卓)UI卡顿面试知识小结
  5. Android内存(内存溢出 内存不足 内存低 .)优化详解
  6. Android(安卓)内存泄露与优化,以及MAT工具
  7. Android(安卓)native crash 日志分析
  8. Fatal signal 11 (SIGSEGV), code 1, fault addr 0x34 in tid 75
  9. Android内存泄露问题分析

随机推荐

  1. Android中DialogFragment优于Dialog
  2. dlopen failed: library "/system/lib/li
  3. Android ble 蓝牙4.0 总结一
  4. Android Platform 3.0 SDK和Eclipse ADT
  5. Android NDK编译选项设置
  6. Android Studio xml android标签突然没有
  7. 每天一点小知识【6】
  8. Android 接口回调机制
  9. Activity与Thread之间的通讯
  10. android 5.1 USB调试开关