Android面向面試複習----內存管理

內存管理

1. 內存管理機制概述

1. 分配機制

操作系統會爲每個進程分配合理的內存大小,保證每一個進程能夠合理的運行,而不至於內存不夠用或者某個進程佔用太多的內存。

2. 回收機制

系統內存不足時,會有一個合理的回收再分配內存的機制,保證新的進程能夠正常運行。

2. Android內存管理機制

1. 分配機制

彈性內存分配:開始分配一個小的內存大小(根據物理設備的內存大小決定),等到當前內存不夠使用時,會逐步分配更大的內存空間,但是有一個最大值。安卓系統是想讓更多的應用進程能夠存活到內存中,再次啓動時,直接恢復進程而不需要再次啓動進程,提升用戶體驗。

// 查看當前進程可以申請的最大內存
Runtime rt=Runtime.getRuntime();
long maxMemory=rt.maxMemory();

2. 回收機制

遵循一個宗旨:盡最大限度的使用。(繼承linux),缺點:當進程不再使用的時候,內存中還會保存有該進程的數據。安卓在內存不夠使用的時候會殺死其他進程給新進程使用,進程有優先級之分。

  • 前臺進程(正在交互的進程)
  • 可見進程(可見但無法交互的進程)
  • 服務進程
  • 後臺進程
  • 空進程(GC能夠直接回收)
    (後臺進程和空進程比較容易被回收)

3、 內存管理機制的特點

1. 更少的佔用內存

體驗更好,流暢

2. 在合適的時候,合適的釋放系統資源

頻繁的釋放內存資源,會造成內存抖動,可能會引起anr,ui卡頓,oom等。

3. 在系統內存緊張的情況下,能釋放掉大部分不重要的資源,來爲Android系統提供可用的內存。

4. 能夠很合理的在特殊生命週期中,保存或者還原重要數據,以至於系統能夠正確的重新恢復該應用。

4. 內存優化方法

1. 當Service完成任務後,儘量停止它(使用Intentservice代替它,來做耗時操作,同時也能自動退出,而Service不會自動退出)

2、 在UI不可見的時候,釋放掉一些只有UI使用的資源(OnTrimMemory優化)

參考:OnTrimMemory優化

3. 在系統內存緊張的時候,儘可能多的釋放掉一些非重要資源

同上

4. 避免濫用Bitmap導致的內存浪費

加載合適的分辨率的圖片;釋放掉那些需要釋放的圖片;使用LruCache來緩存圖片;合理使用軟引用

5. 使用針對內存優化過的數據容器

SparseArray替代HashMap;儘量少用枚舉(內存佔用比正常常量大很多)

6. 避免使用依賴注入的框架

在運行時需要額外需要更多的內存

7. 使用ZIP對其的APK

運行時更少佔用內存

8. 使用多進程

定位、推送、webview等,不過這是一把雙刃劍。

5. 內存溢出VS內存泄露

1. 內存溢出

最有效的方式,優化圖片:壓縮圖片,使用inBitmap,裁剪,回收

2. 內存泄露

使用Android Monitor;MAT; LeakCanary

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章