簡介: Application和Activity、Service一樣,都是Android框架的一個系統組件,每一個應用都有一個Application,Application的生命周期也就是整個app的生命周期。 特點: 實例的創建方式:單例模式 每一個app運行是會首先會創建Application類 ...
簡介:
Application和Activity、Service一樣,都是Android框架的一個系統組件,每一個應用都有一個Application,Application的生命周期也就是整個app的生命周期。
特點:
- 實例的創建方式:單例模式
每一個app運行是會首先會創建Application類並實例化application對象,有且只有一個(單例模式),也可以繼承application自定義Application類,需在manifeast中註冊。
- 實例類型:全局類型
不同組件獲得的application實例是同一個實例。
- 生命周期
application的生命周期等於這個應用的生命周期。
Application的使用:
- onCreate()
Application創建時調用,用於初始化一些資源、第三方框架的初始化等,這個方法裡面切記不要執行耗時的操作,不然影響第一個activity、service的啟動速度
- onLowMemory()
onLowMemory()是Android系統記憶體不足時,當所有的後臺程式都被kill了之後還是沒有足夠的記憶體來運行當前的應用,這個時候系統就會通知你輪到你清理一下釋放一些資源保障app能夠運行。
- onTrimMemory()
onTrimMemory(int level)的傳參是一個int型,這個數值越大代表著記憶體不足的嚴重性越高。有一個很有意思的比方:
從前有個偉大的媽媽叫Android系統,她有一群子女叫APP,她含辛茹苦地養著這群熊孩子。當系統老媽發現她的工資(記憶體)不夠下個月的開銷的時候,就會回調這個方法,告訴她的APP子女,我現在工資不夠了,你們趕緊少吃少用點,不然我就要根據你們的重要 性高低來一個一個地“清理門戶”了。
這裡有傳入一個int類型的參數level,它告訴APP們記憶體不足的嚴重性(越高越嚴重)。假如這時候系統記憶體不足,運行著前臺和後臺一共幾個APP,這些不同的APP會收到系統老媽不同的“勸告信息”:
- TRIM_MEMORY_RUNNING_MODERATE:數值為5,這個APP是系統老媽的“掌上明珠”(前臺APP),老媽讓APP註意一下:不要大手大腳(釋放不用的記憶體),我的工資(記憶體)不夠養你了,不過就算再不夠,只是把你其他不爭氣兄弟姐妹(殺掉後臺APP)清出家門,你註意一下吧。
- TRIM_MEMORY_RUNNING_LOW:數值10,這個APP是系統老媽的“掌上明珠”(前臺APP),老媽語重心長地對APP說:孩子,我的工資(記憶體)實在不夠了,你能不能拿點壓歲錢出來幫補一下(釋放不用的記憶體),不行的話就要把你的很多兄弟姐妹(殺掉後臺APP)送走了。
- TRIM_MEMORY_RUNNING_CRITICAL:數值15,這個APP是系統老媽的“掌上明珠”(前臺APP),老媽嚴重警告APP:臭小子,你的兄弟姐妹(殺掉後臺APP)都快走光了,你還不給我多省點錢(要求釋放記憶體),你還真的想把你的兄弟全趕走啊,當時候就剩你一個,說不定你都自身難保啦(執行onLowMemory()方法)。
- TRIM_MEMORY_UI_HIDDEN:數值20,老媽告訴這個APP:你個熊孩子,闖了禍(用戶把APP從前臺切換到後臺),我要收回你的零用錢(UI資源)。
- TRIM_MEMORY_BACKGROUND :數值40,這些APP是老媽收養的(後臺APP),老媽在吃完晚飯後留下了他,對他說:孩子啊,現在家裡經濟不好(記憶體不足),你就少花點吧,這個月的零用錢不發了吧(要求釋放資源),不然的話我們家可能養不下你和你後面的那幫兄弟姐妹了(殺掉後臺APP)。
- TRIM_MEMORY_MODERATE :數值60,這些APP是老媽收養的(後臺APP),老媽偷偷地跟APP說:孩子啊,你們花費太多了,老媽的工資養不下你們了(記憶體不足),你們用少點吧(要求釋放記憶體),不然等我把你後面那幾個兄弟趕出去之後就輪到你了(已進入LRU緩存列表的中間位置,如果後面的APP進程資源都被回收的話,下一個就是輪到它了)。
- TRIM_MEMORY_COMPLETE :數值80,這些APP是老媽充話費送的(後臺APP),老媽狠狠地對他說:臭小子,沒看到都快揭不開鍋了(記憶體不足)嗎?趕緊把你的私房錢拿出來(要求釋放資源),不然你們就準備滾出這個家門吧(已處於LRU緩存列表的後面位置,APP隨時都有被回收的風險)。
onTrimMemory()和onLowmemory()的區別:
- onLowMemory被回調時此時已經沒有後臺進程了,而onTrimMemory被回調時此刻還存在後臺進程。
- onLowMemory是在最後一個後臺進程被殺時調用,一般情況是low memory killer 殺進程後觸發;而OnTrimMemory的觸發更頻繁,每次計算進程優先順序時,只要滿足條件,都會觸發。