日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android 应用内存优化 之 onLowMemory onTrimMemory

發(fā)布時間:2025/5/22 Android 160 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android 应用内存优化 之 onLowMemory onTrimMemory 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

OnLowMemory:

  是Android提供的API,在系統(tǒng)內(nèi)存不足,所有后臺程序(優(yōu)先級為background的進程,不是指后臺運行的進程)都被殺死時,系統(tǒng)會調(diào)用OnLowMemory。
OnTrimMemory:

  是Android 4.0之后提供的API,系統(tǒng)會根據(jù)不同的內(nèi)存狀態(tài)來回調(diào)。根據(jù)不同的內(nèi)存狀態(tài),來響應不同的內(nèi)存釋放策略。

onTrimMemory傳入的幾個內(nèi)存級別釋放內(nèi)存:

    • TRIM_MEMORY_RUNNING_MODERATE
      你的應用正在運行,并且不會被殺死,但設備已經(jīng)處于低內(nèi)存狀態(tài),并且開始殺死LRU緩存里的內(nèi)存。
    • TRIM_MEMORY_RUNNING_LOW
      你的應用正在運行,并且不會被殺死,但設備處于內(nèi)存更低的狀態(tài),所以你應該釋放無用資源以提高系統(tǒng)性能(直接影響app性能)
    • TRIM_MEMORY_RUNNING_CRITICAL
      你的應用還在運行,但系統(tǒng)已經(jīng)殺死了LRU緩存里的大多數(shù)進程,所以你應該在此時釋放所有非關鍵的資源。如果系統(tǒng)無法回收足夠的內(nèi)存,它會清理掉所有LRU緩存,并且開始殺死之前優(yōu)先保持的進程,像那些運行著service的。同時,當你的app進程當前被緩存,你可能會從onTrimMemory()收到下面的幾種level.
    • TRIM_MEMORY_BACKGROUND
      系統(tǒng)運行在低內(nèi)存狀態(tài),并且你的進程已經(jīng)接近LRU列表的頂端(即將被清理).雖然你的app進程還沒有很高的被殺死風險,系統(tǒng)可能已經(jīng)清理LRU里的進程,你應該釋放那些容易被恢復的資源,如此可以讓你的進程留在緩存里,并且當用戶回到app時快速恢復.
    • TRIM_MEMORY_MODERATE
      系統(tǒng)運行在低內(nèi)存狀態(tài),你的進程在LRU列表中間附近。如果系統(tǒng)變得內(nèi)存緊張,可能會導致你的進程被殺死。
    • TRIM_MEMORY_COMPLETE
      系統(tǒng)運行在低內(nèi)存狀態(tài),如果系統(tǒng)沒有恢復內(nèi)存,你的進程是首先被殺死的進程之一。你應該釋放所有不重要的資源來恢復你的app狀態(tài)。

狀態(tài)版本添加說明:

TRIM_MEMORY_COMPLETE:內(nèi)存不足,并且該進程在后臺進程列表最后一個,馬上就要被清理
TRIM_MEMORY_MODERATE:內(nèi)存不足,并且該進程在后臺進程列表的中部。
TRIM_MEMORY_BACKGROUND:內(nèi)存不足,并且該進程是后臺進程。
TRIM_MEMORY_UI_HIDDEN:內(nèi)存不足,并且該進程的UI已經(jīng)不可見了。?
以上4個是4.0增加
TRIM_MEMORY_RUNNING_CRITICAL:內(nèi)存不足(后臺進程不足3個),并且該進程優(yōu)先級比較高,需要清理內(nèi)存
TRIM_MEMORY_RUNNING_LOW:內(nèi)存不足(后臺進程不足5個),并且該進程優(yōu)先級比較高,需要清理內(nèi)存
TRIM_MEMORY_RUNNING_MODERATE:內(nèi)存不足(后臺進程超過5個),并且該進程優(yōu)先級比較高,需要清理內(nèi)存?
以上3個是4.1增加

onTrimMemory()是在API 14里添加的,你可以在老版本里使用onLowMemory()回調(diào),大致跟TRIM_MEMORY_COMPLETE事件相同。

onLowMemory、 onTrimMemory優(yōu)化,需要釋放什么資源?

在內(nèi)存緊張的時候,會回調(diào)OnLowMemory/OnTrimMemory,需要在回調(diào)方法中編寫釋放資源的代碼。
可以在資源緊張的時候,釋放UI 使用的資源資:Bitmap、數(shù)組、控件資源。

注意回調(diào)時刻:

OnLowMemory被回調(diào)時,已經(jīng)沒有后臺進程;而onTrimMemory被回調(diào)時,還有后臺進程。
OnLowMemory是在最后一個后臺進程被殺時調(diào)用,一般情況是low memory killer 殺進程后觸發(fā);而OnTrimMemory的觸發(fā)更頻繁,每次計算進程優(yōu)先級時,只要滿足條件,都會觸發(fā)。

在Application、 Activity、Fragement、Service、ContentProvider中都可以重寫回調(diào)方法,對OnLowMemory/OnTrimMemory進行回調(diào),在回調(diào)方法中實現(xiàn)資源釋放的實現(xiàn)。
以Activity為例,在Activity源碼中能夠看到對于onTrimMemory的定義,因此在回調(diào)的時候重寫方法即可。

優(yōu)化:

用戶退出ui時,在Activity里實現(xiàn)onTrimMemory()回調(diào),你應該在這個方法里監(jiān)聽TRIM_MEMORY_UI_HIDDEN,它表示你的UI從視圖中隱藏了,你需要釋放只有UI使用的資源。

1 @Override 2 public void onTrimMemory(int level) { 3 super.onTrimMemory(level); 4 if (!getProcessName().equals(packageName)) { 5 return; 6 } 7 }

實現(xiàn):

1. 聲明:

1 public static class ViewComponentCallbacks implements ComponentCallbacks { 2   @Override 3   public void onConfigurationChanged(Configuration arg) { 4   } 5 6   @Override 7   public void onLowMemory() { 8     //釋放資源 9     super.onLowMemory(); 10   } 11 }

2. 注冊自定義的回調(diào)類:

1 HandlerMemoryCallbacks callBacks =new HandlerMemoryCallbacks(); 2 this.registerComponentCallbacks( callBacks );

?

OnTrimMemory是Android在4.0之后加入的一個回調(diào),任何實現(xiàn)了ComponentCallbacks2接口的類都可以重寫實現(xiàn)這個回調(diào)方法.OnTrimMemory的主要作用就是?指導應用程序在不同的情況下進行自身的內(nèi)存釋放,以避免被系統(tǒng)直接殺掉,提高應用程序的用戶體驗.

?

參考:

Android開發(fā):性能最佳實踐-管理應用內(nèi)存

總結(jié)

以上是生活随笔為你收集整理的Android 应用内存优化 之 onLowMemory onTrimMemory的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。