殺死哪個進程來回收資源由進程中的應用程式的優先順序決定的。應用程式的優先順序與它的組件的最高優先順序相同。
當兩個應用程式的優先順序相同時,那個長時間處於較低優先順序的進程會被先殺死。進程的優先順序同樣受進程間依賴影響,如果一個應用程式依賴於另外一個應用程式的Service或Content Provider的話,那麼,提供服務的應用程式至少和接受服務的應用程式一樣高的優先順序。
所有的應用程式在記憶體裡運行,直到系統需要它的資源來分配給其他的應用程式。
圖3-3顯示了優先順序樹,用來決定應用程式被終止的順序。
正確地構建應用程式來保證它的優先順序適合它做的事情是很重要的。如果你不這麼做,你的應用程式在某些重要時期可能會被殺死。
下面的列表詳細地描述了圖3-3中顯示的應用程式的狀態,解釋了怎樣由組件決定狀態:
❑ Active Process
Active (前台) process是進程中依附的應用程式套件組合含當前與使用者互動的組件。這些是Android通過回收資源來極力保護持續響應性的進程。一般,極少擁有像這樣的進程,它們最後才被殺死。
Active process包括:
❑ 處於“active”狀態的Activity,它們運行在前台來響應使用者的事件。在這章中,你將會看到更多關於Activity狀態的細節。
❑ Activity, Service, 或者正在執行onReceive事件處理函數的Broadcast Receiver。
❑ 正在執行onStart,onCreate,OnDestroy事件處理函數的Service。
❑ Visible Process
可見但不活動的進程是那些擁有“可見”Activity的進程。由名字想到的,“可見”Activity是那些在螢幕上可見,但不是在前台或不響應使用者事件的Activity。這種情況發生在當一個Activity被部分遮蓋的時候(被一個非全屏或者透明的Activity)。一般,也極少擁有可見的進程,它們只在極端的情況被殺死來保證Active Process的運行。
❑ Started Service Process
進程中依附著已經啟動的Service。Service以動態方式持續運行但沒有可見的介面。因為Service不直接和使用者互動,它們擁有比visible Process較低的優先順序。它們還是可以被認為是前台進程,不會被殺死,直到資源被active/visible Process需求。你將會在第8章學習到Service。
❑ Background Process
進程中依附的Activity不可見和進程中沒有任何啟動的Service,這些進程都可以看作是後台進程。在系統中,擁有大量的後台進程,並且Android按照後看見先殺死的原則來殺死後台進程來擷取資源給前台進程。
❑ Empty Process
為了改善整個系統的效能,Android經常在記憶體中保留那些已經走完生命週期的應用程式。Android維護這些緩衝來改善應用程式重新啟動的啟動時間。這些進程在資源需要的時候常常被殺死。