Android 开发中踩过的坑之一: RemoteView可能造成内存泄露

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

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


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

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

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


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

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


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

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

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

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




转载于:https://my.oschina.net/u/1393188/blog/487199

你可能感兴趣的:(Android 开发中踩过的坑之一: RemoteView可能造成内存泄露)