前一段時間接手了一個新的項目垄懂,看友盟后臺有好多OOM,而且滑動起來也很不流暢。我便對此產生了好奇包蓝。花了一段時間把內存這個徹徹底底的研究了一下,在此總結一下怎么樣才能把app的內存占用降低下去绰上。
題外話:推薦一個非常好用的開源項目 leakcanary只要加短短兩句話呈驶,內存泄露非常直白就被展現出來了郑诺。
內存溢出基本上大部分都是內存泄露導致的苫耸,泄露泄露泄露最后超出最大內存限制然后就OOM了州邢,下面介紹兩個快速緩解(注意是緩解)OOM的辦法:
1、 當然如果你的app確實需要展示很多圖片褪子,那么建議你在Manifest中加入Android:largeHeap=true , 那么你的程序在3.0以后就可以使用256兆內存(并不推薦用這個方法解決oom問題量淌,但是這個卻是最快的)。
2褐筛、 ImageLoader RGB_565 要比 RGB_8888 省好多好多的內存...不了解的可以百度一下(同時建議用glide替換Imageloader,好處有很多,例如綁定生命周期之類云云)叙身。
**可能造成項目內存泄露的地方: **
- 1 WebView內存泄露 (xml中注冊)
- 2 Dialog 內存泄露 (橫豎屏切換)
- 3 數據庫操作 (游標渔扎,事務等)
- 4 bitmap 沒釋放 (Native 操作bitmap)
- 5 handler 內存泄露 (Activity 被關閉)
- 6 單例持有Activity對象導致內存泄露 (會阻止被回收)
- 7 廣播沒有unregister (之類需要解綁操作的)
- 8 File 輸入輸出流操作 (注意加 finally)
- 9 沒有緩存 convertView (越滑越卡)
這些就是可能造成內存泄露最終導致內存溢出的地方,以后會慢慢補充信轿,關于下列兩點我后續(xù)會繼續(xù)po文章講解決辦法:
- WebView內存泄露以及解決辦法晃痴。
- handler內存泄露的原因以及解決辦法。