Android常用的記憶體優化方法總結

2021-09-16 13:19:22 字數 2111 閱讀 7191

1.降低執行時記憶體

2.**優化

3.記憶體洩漏優化

1.降低執行時記憶體

降低執行時記憶體可以分為減小apk體積和bitmap優化兩部分

(1)減小apk體積

方法一:去除無用的資源**,通過合理使用git,一些由於業務變更而基本不會用到的**,該刪除的決不能手軟。

即使以後要用到,通過git也能找回。同時一些資源未用到的也應該刪除,因為即使gradle配了sharkresource選項

發布的時候這些沒用到的依然會被打包到你的apk.

方法二:盡量復用資源,其實這是一種比較好的編碼習慣。

方法三:對應用的啟**引導頁進行壓縮,往往這些佔據了大部分空間,壓縮後可以起到很好的效果。平時開發中

對於解析度大於100*100的基本山都會進行壓縮,很多好的壓縮演算法經常可以減少一半的大小,而感官上基本看不出有

任何改變。

(2)bitmap優化

方法一:統一的bitmap載入器,選擇glide,fresco,picasso中的乙個作為載入框架。實際開發中載入到view的的大小

不應該超過view的大小,載入框架預設hi對進行快取,按view實際大小載入。在開發中為了減少apk的大小,一般只放

一套3x,但是這些在小解析度的手機上直接載入就會出現記憶體浪費。統一的bitmap載入器就可以很好的解決該問題。

方法二:存在畫素浪費,對於.9圖,美工可能在出圖時在拉伸與非拉伸區域都有大量的畫素重複。而這些是可以縮小,

但並不影響顯示效果。

方法三:insamplesize:縮放比例,在把載入如記憶體之前,我們需要計算乙個合適的縮放比例,避免不必要的大圖載入。

(使用inbitmap引數前,每建立乙個bitmap物件都會分配一塊記憶體供其使用,而使用了inbitmap引數後,多個bitmap可以復用

一塊記憶體,這樣可以提高效能。)

(2)在ondraw()這種頻繁呼叫的方法要避免物件的建立操作,因為他會迅速增加記憶體的使用,引起頻繁的gc,甚至記憶體抖動。

(3)softreference(軟引用),weakreference(弱引用),phantomreference(虛引用)

(4)謹慎使用large heap, android裝置由於軟硬體的差異,heap閥值不同,特殊情況下可以在manifest中使用largeheap=true宣告

乙個更大的heap空間,使用getlargememoryclass()來獲取到這個更大的空間。但是要謹慎使用,因為額外的空間會影響到系統整體

的使用者體驗,切換任務時效能大打折扣,對於oom異常是指標不治本的一種做法。

(5)謹慎使用多程序,使用多程序可以把應用中的部分元件執行在單獨的程序當中,這樣可以擴大應用的記憶體占用範圍,但是這個技術

必須謹慎使用,絕大多數應用都不應該貿然使用多程序,一方面是因為使用多程序會使得**邏輯更加複雜,另外如果使用不當,他可能

反而會導致顯著增加記憶體。

3.記憶體洩漏優化

(1)activity呼叫了finish,但是引用activity的物件未被釋放(生命週期沒有結束),activity context被傳遞到其他例項中,可能

導致自身被引用而發生洩漏,建議使用weakreferce.

(3)大多數情況下,我們對bitmap物件增加快取機制,但是有時候部分bitmap需要及時**。比如我們臨時建立的某個相對大的bitmap物件

變換得到新的bitmap物件後,盡快**原始的bitmap,及時釋放原來的空間。

(4)webview引起的記憶體洩漏主要是因為

org.chromium.android_webview.awcontents 類中註冊了component callbacks,

但是未正常反註冊而導致的。讓ondetachedfromwindow先走,在主動呼叫destroy()之前,

把webview從它的parent上面移除掉(basewebfragment ondestroy())

(5)雖然單例模式簡單實用,提供了很多便利性,但是因為單例的生命週期和應用保持一致,使用不合理很容易出現持有物件的洩漏。

(6)我們在對資料庫進行操作時,使用完cursor沒有及時關閉,cursor的洩露,會對記憶體管理帶來負面影響。

(7)謹慎使用static物件,因為static的生命週期過長,和應用的程序保持一致,使用不當很可能導致物件洩漏。

Android的記憶體優化

android應用優化主要集中在記憶體和ui流暢度上。從記憶體占用與洩露 ui流暢度的幀數和響應時間到io的堵塞式響應時間等。記憶體優化 首先。為什麼要優化記憶體?主要體如今oom out of memory 和導致ui不流暢上。對於手機來說。記憶體是乙個很稀缺的資源,即使是如今普遍擁有著很大記憶體...

android記憶體優化

1 使用option進行壓縮。public static bitmap createimagethumbnail string filepath catch exception e return bitmap public static int computesamplesize bitmapfac...

android記憶體優化

android因其系統的特殊性,安裝的軟體預設都安裝到記憶體中,所以隨著使用者安裝的軟體越來越多,可供執行的程式使用的記憶體越來越小,這就要求我們在開發android程式時,盡可能的少占用記憶體。根據我個人的開發經驗總結了如下幾點優化記憶體的方法 建立或其他方式獲得的物件如不再使用,則主動將其置為n...