android系統會盡可能長的延續乙個應用程式程序,但在記憶體過低的時候,仍然會不可避免需要移除舊的程序。為決定保留或移除乙個程序,android將每個程序都放入乙個「重要性層次」中,依據則是它其中執行著的元件及其狀態。重要性最低的程序首先被消滅,然後是較低的,依此類推。重要性共分五層,依據重要性列表如下:
1. 前台程序
•是使用者操作所必須的,
任一時間下,僅有少數程序會處於前台,僅當記憶體實在無法供給它們維持同時執行時才會被殺死。一般來說,在這種情況下,裝置依然處於使用虛擬記憶體的狀態,必須要殺死一些前台程序以使用者介面保持響應。
•android會依據程序中當前活躍元件的重要程度來盡可能高的估量乙個程序的級別。比如說,如果乙個程序中同時有乙個服務和乙個可視的activity,則程序會被判定為可視程序,而不是服務程序。
2. 可視程序
沒有前台元件,但仍可被使用者在螢幕上所見。當滿足如下任一條件時,程序被認為是可視的:
• 它包含著乙個不在前台,但仍然為使用者可見的activity(它的onpause()方法被呼叫)。這種情況可能出現在以下情況:比如說,前台activity是乙個對話方塊,而之前的 activity位於其下並可以看到。
• 它包含了乙個繫結至乙個可視的activity的服務。
可視程序依然被視為是很重要的,非到不殺死它們便無法維持前台程序執行時,才會被殺死。
3. 服務程序
4. 背景程序
包含目前不為使用者所見的activity(activity物件的 onstop() 方法已被呼叫)。這些程序與使用者體驗沒有直接的聯絡,可以在任意時間被殺死以**記憶體供前台程序、可視程序以及服務程序使用。一般來說,會有很多背景程序執行,所以它們一般存放於乙個lru(最後使用)列表中以確保最後被使用者使用的activity最後被殺死。如果乙個activity正確的實現了生命週期方法,並捕獲了正確的狀態,則殺死它的程序對使用者體驗不會有任何不良影響。
5. 空程序
不包含任何活動應用程式元件。這種程序存在的唯一原因是做為快取以改善元件再次於其中執行時的啟動時間。系統經常會殺死這種程序以保持程序快取和系統核心快取之間的平衡。
此外,乙個程序的級別可能會由於其它程序依賴於它而公升高。乙個為其它程序提供服務的程序級別永遠高於使用它服務的程序。比如說,如果a程序中的內容提供者為程序b中的客戶端提供服務,或程序a中的服務為程序b中的元件所繫結,則a程序最低也會被視為與程序b擁有同樣的重要性。
Android中的程序生命週期
android中的程序簡介 四大元件 activity,service,broadcastreceiver contentprovider 都是執行在主線程中。android中的程序生命週期 android系統會盡可能長時間的來維持程序,但是當記憶體不足時,android系統會根據程序的優先順序來殺...
程序生命週期
對於乙個程序,基本概念我覺得就是乙個資源分配單位。對於每乙個程序都有對應的pcb 程序控制塊 在linux下的pcb是task struct。對於task struct,一開始我看原始碼的時候也是非常痛苦,看了這忘了那,一直都模模糊糊。所以總結之後,覺得得需要根據乙個程序,需要有什麼東西,大概就能有...
android生命週期
通用生命週期流程如下 正常啟動 oncreate onstart onpost oncreate onresume onpostresume 轉向下乙個activity onpause onstop 從下乙個activity返回當前 按機器返回鍵 onrestart onstart onresume...