Android 應用內存管理-onTrimMemory,onLowMemory

[onLowMemory](https://developer.android.com/reference/android/content/ComponentCallbacks.html#onLowMemory()

onLowMemory是Android提供的API,當整個系統運行內存不足時,就會被調用。
系統爲其提供回調的組件有:Application/Activity/Fragment/Service/ContentProvider
系統爲其提供回調的接口有:
ComponentCallbacks/ComponentCallbacks2
組件通過覆寫onLowMemory方法的形式監聽,接口通過以下方式進行註冊監聽(其實四大組件也是實現了ComponentCallbacks接口):

public static class MyCallback implements ComponentCallbacks {
         @Override
        public void onConfigurationChanged(Configuration arg) {
         }
        @Override
        public void onLowMemory() {
            //do release operation
        }
    }

Context.registerComponentCallbacks()

onLowMemory 當後臺程序已經終止資源還匱乏時會調用這個方法。好的應用程序一般會在這個方法裏面釋放一些不必要的資源來應付當後臺程序已經終止,前臺應用程序內存還不夠時的情況。

onTrimMemory

OnTrimMemory是Android 4.0之後提供的API,系統會根據不同的內存狀態來回調。系統提供的回調有:
* Application.onTrimMemory()
* Activity.onTrimMemory()
* Fragement.OnTrimMemory()
* Service.onTrimMemory()
* ContentProvider.OnTrimMemory()

OnTrimMemory的參數是一個int數值,代表不同的內存狀態:
* TRIM_MEMORY_COMPLETE:內存不足,並且該進程在後臺進程列表最後一個,馬上就要被清理
* TRIM_MEMORY_MODERATE:內存不足,並且該進程在後臺進程列表的中部。
* TRIM_MEMORY_BACKGROUND:內存不足,並且該進程是後臺進程。
* TRIM_MEMORY_UI_HIDDEN:內存不足,並且該進程的UI已經不可見了。

以上4個是4.0增加
* TRIM_MEMORY_RUNNING_CRITICAL:內存不足(後臺進程不足3個),並且該進程優先級比較高,需要清理內存
* TRIM_MEMORY_RUNNING_LOW:內存不足(後臺進程不足5個),並且該進程優先級比較高,需要清理內存
* TRIM_MEMORY_RUNNING_MODERATE:內存不足(後臺進程超過5個),並且該進程優先級比較高,需要清理內存

以上3個是4.1增加

系統也提供了一個ComponentCallbacks2,通過Context.registerComponentCallbacks()註冊後,就會被系統回調到。

onLowMemory和onTrimMemory的比較

1,onLowMemory被回調時,已經沒有後臺進程;而onTrimMemory被回調時,還有後臺進程。
2,onLowMemory是在最後一個後臺進程被殺時調用,一般情況是low memory killer 殺進程後觸發;而onTrimMemory的觸發更頻繁,每次計算進程優先級時,只要滿足條件,都會觸發。
3,通過一鍵清理後,onLowMemory不會被觸發,而onTrimMemory會被觸發一次。

https://developer.android.com/reference/android/content/ComponentCallbacks2.html

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