做Android很久了, 零零碎碎的坑踩了不少, 也有踩了又踩的. 回忆收集一下以备自查, 也让大家能瞄一眼.


RemoteView可能造成内存泄露, 这个坑是几年前踩的.

当时APP做了非常系统话通知栏模块. 上线后发现很多用户发通知时总奔溃. 跟了很久, 不明所以.

一日发现, 测试用的手机,一个多月没关机, 发通知栏特别卡. 拿来dump一下, 发现用于通知栏的RemoteView占用内存巨大.


扒来系统源码找到原因, 根源在于RemoteView.

在每次发动通知前, 最好重新构造一个RemovteView, 否则可能造成内存泄露


因为RemoteView, 事实上, 并不是Veiw. 而是一个"操作记录表".

它把所有用户的对于veiw的操作当做"Action"记录下来, 最终由Android的通知栏来模块来处理这些记录. 完成APP的通知行为.

RemovteView这个"操作记录表"不会remove任何记录. 每次通知, 都是从第一条Action, 一直执行到最新添加的Action.

这使将内存只增不减.同时通知栏显示卡顿. 因为从RemovteView 创建开始时所有的Action都会被执行. 太多必然卡顿.




更多相关文章

  1. Android性能优化笔记
  2. 面试时的那些坑之内存泄漏和内存溢出
  3. Android开发之如何使用通知提醒功能(Notifications)
  4. Android(安卓)反射调用方法并利用此方法展开android通知栏(兼容4.
  5. Android短信会话(查看会话记录以及会话详情界面)---短信管家3
  6. android 将对象存储于本地(内存)
  7. Android(安卓)内存优化篇 - 使用profile 和 MAT 工具进行内存泄
  8. Android(安卓)桌面组件【app widget】 进阶项目②--心情记录器
  9. 内存问题

随机推荐

  1. Xperia Android(安卓)调教指南
  2. android4.4 debug调试授权拦截(替换掉 允
  3. Android(安卓)更改头像(图片)并上传服务器
  4. 四、android百度地图之导航(环境的配置)
  5. 去除android导航栏和状态栏(返回键,home键,
  6. Android逆向之旅---爆破应用签名的一种全
  7. android onkeydown()简介
  8. 视频学习笔记:Android(安卓)ffmpeg解码多
  9. 利用adb无线连接android手机进行调式 无
  10. Android(安卓)解析后台返回为Json数据的