內存分析
由於有些圖片截取的區域較大,可能看不清楚上面的字。可以放大查看,Chrome瀏覽器使用鼠標滾輪+ctrl。
原因
爲什麼要進行內存分析?
原因一:頻繁GC導致UI線程卡頓
如果程序出現大量的內存分配和釋放,就意味着產生了頻繁的GC。當GC線程運行時,其他線程會停止工作(包括UI線程),直到GC完成。所以頻繁的GC,必然會導致UI線程的卡頓。特別是性能比較差的手機上,尤爲明顯。
原因二:內存泄漏
如果程序出現大量的內存分配,這是而GC無法回收(一般都是因爲有強引用在引用該對象,也就是所謂的內存泄漏),那就會導致程序最終因爲內存枯竭而崩潰。在程序上的表現,就是拋出OutOfMemory異常。
當出現上面兩種情況的時候就需要進行內存分析了
分析手段
通過AndroidStudio自帶的Monitors工具集中的Memory工具來分析。
使用Memory工具分析頻繁GC
頻繁GC在Memory監視工具中的表現是出現了大量鋸齒狀內存波動。如果沒有出現這種類型的波動,就不是頻繁的GC了
1. 選擇要監視的線程
2. 獲取內存分配監視報告
1. 手動觸發GC
- 點擊監視按鈕,開始監視,按鈕狀態變爲,再次點擊後結束監視
結束監視後會得到結果文件
3. 分析監視結果文件
分析過程已經標註在圖片上了,也就是圖片上的紅字
排序
展開
跳轉到相應源碼
找到相應代碼,並解決
解決
通過分析可以出現內存波動是由於,頻繁的創建臨時Bitmap對象導致。在上面的業務中最終使用ColorDrawable進行代替。
總結
上面通過展示一次解決內存優化的過程,來展示解決內存問題的一種思路。希望能給大家提供一些借鑑。