最近寫一個頁面內會屢次拍照並保存的需求.連拍屢次發現內存泄漏. 找緣由花了很多時間.記錄下來.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,這是個不多吹水,有人解決問題的羣.