Android - 應用程序的優先級和進程狀態


  Android在回收資源的時候,進程被終止的順序是由它們的應用程序的優先級所決定的。一個應用程序的優先級等同於它的優先級最高的組件的優先級

  當兩個應用程序有相同的優先級時,在較低優先級狀態運行時間最長的進程將會首先被終止。進程的優先級也收到進程間依賴性的影響。如果一個應用程序依賴於第二個應用程序所提供的Service或者Content Provider,那么第二個應用程序至少會擁有與它所支持的這個應用程序相同的優先級。

  

所有的Android應用程序都會保持在內存中運行,知道系統需要釋放它的資源 供其它應用程序使用時為止。

  通過合理地組織應用程序來保證它具有能夠正常工作的適當的優先級時非常重要的。如果沒有做到這一點,則應用程序就可能在執行某些比較重要的操作時被終止,或者在不再需要的時候保持運行。

  1)Active進程 Active(前台)的進程是指那些有組件正和用戶進行交互的應用程序的進程。這些都是Android嘗試通過回收其它應用程序的資源來使其保持相應的進程。這些進程的數量非常少,只有到最后的關頭才會終止這些進程

      Active的進程包括:

      1;處於活動狀態的Activity,也就是說,它們位於前台並對用戶事件進行響應

      2;正在執行onReceive事件處理程序的Broadcast Receiver

      3;正在執行onStart、onCreate或者onDestroy事件處理程序的Service

      4;正在運行、且已被標記為在前台運行的Service

  2)可見進程 可見但是非活動的進程是指那些駐留”可見“Activity的進程。顧名思義,可見的Activity能被用戶看到,但是它們並不在前台運行或者能對用戶事件作出反應。例如:當一個Activity被部分遮擋時(被一個非全屏或者透明的Activity遮擋)就會出現這種情況。這些進程的數量也很少,只有在資源極度匱乏的環境下,為保證Activity進程繼續執行時才會終止這些進程。

  3)啟動Service進程 已經啟動的Service的進程。因為后台Service沒有直接和用戶交互,所以他們的優先級要比可見Activity或前台Service低一些。但是他們仍然被認為是前台(foreground)進程,除非活動或者可見的進程需要資源,否則不會終止它們。當系統終止一個運行的Service后,會在資源可用時嘗試重新啟動Service(除非告訴系統不要這么做)

  4)后台進程 不可見、並且沒有任何正在運行的Service的Activity的進程。通常會有大量的后台進程,Android將使用”最后一個被看到,第一個被終止“(last-seen-first-killed)的方式來終止他們,從而為前台進程提供資源。

  5)空進程 為了提高系統整體性能,Android經常在應用程序的生存周期結束之后仍然把它們保存在內存中。Android通過維護這個緩存來減少應用程序被再次啟動時的啟動時間。通常這些進程會根據需要被定期終止。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM