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

做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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值