最近写一个页面内会屡次拍照并保存的需求.连拍屡次发现内存泄漏. 找缘由花了很多时间.记录下来.java
将byte[]保存为文件.明明已经关闭了流.数组
然而一顿连拍后,内存监控却大吃一惊.bash
点小黄车gc也很差使.... spa
找到内存占用很大的byte[]code
什么?cdn
很明显,Rxjava引用了这个数组,而且这个observerable没被回收.server
先从Rxjava入手了.看源码blog
这里保存了byte[]引用.ip
那么就是Observable订阅没取消咯.内存
什么?不是走了onCompleted()后就会释放吗?
Subscription subscribe = Observable.just(data)
``````//具体逻辑省略
mCompositeSubscription.add(subscribe);
复制代码
mCompositeSubscription.clear();
Subscription subscribe = Observable.just(data)
````//省略
复制代码
//mCompositeSubscription.add(subscribe);
复制代码
虽然问题解决很简单.可是找缘由还挺麻烦的.
1.觉得bitmap没回收.使用弱引用发现依然没效果.
2.查到byte保存为文件时出的问题.
3.查到RxJava转换操做会保存引用.再
4.分析猜是没取消订阅.
5.发现确实是CompositeSubscription的问题
复制代码
但愿以上找bug的过程能给各位带来帮助和思路.
您的喜欢与回复是我最大的动力-_-(ps:还不是为了出名,为了吸粉)
交流群:493180098,这是个不多吹水,有人解决问题的群.