作Android好久了, 零零碎碎的坑踩了很多, 也有踩了又踩的. 回忆收集一下以备自查, 也让你们能瞄一眼.测试
RemoteView可能形成内存泄露, 这个坑是几年前踩的.spa
当时APP作了很是系统话通知栏模块. 上线后发现不少用户发通知时总奔溃. 跟了好久, 不明因此. 内存
一日发现, 测试用的手机,一个多月没关机, 发通知栏特别卡. 拿来dump一下, 发现用于通知栏的RemoteView占用内存巨大. rem
扒来系统源码找到缘由, 根源在于RemoteView.源码
在每次发动通知前, 最好从新构造一个RemovteView, 不然可能形成内存泄露io
由于RemoteView, 事实上, 并非Veiw. 而是一个"操做记录表". 内存泄露
它把全部用户的对于veiw的操做当作"Action"记录下来, 最终由Android的通知栏来模块来处理这些记录. 完成APP的通知行为.系统
RemovteView这个"操做记录表"不会remove任何记录. 每次通知, 都是从第一条Action, 一直执行到最新添加的Action.
这使将内存只增不减.同时通知栏显示卡顿. 由于从RemovteView 建立开始时全部的Action都会被执行. 太多必然卡顿.