Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android進程狀態的切換實現教程

Android進程狀態的切換實現教程

編輯:關於Android編程

進程狀態轉換,同樣可用於線程的狀態轉移

一、進程狀態

進程的生命周期內,有5種狀態,分別為new, runnable, running, blocked, dead共5種狀態,進程所處的狀態,會隨著系統負載以及運行環境的變化而不斷發生改變(由一個狀態切換到另一個狀態)。

process_status

  • 創建狀態(new):進程正在被創建,僅僅在堆上分配內存,尚未進入就緒狀態;

  • 就緒狀態(Runnable):進程已處於准備運行的狀態,即進程已獲得除了CPU之外的所需資源,一旦分配到CPU時間片即可進入運行狀態。

  • 運行狀態(Running):進程正在運行,占用CPU資源,執行代碼。任意時刻點,處於運行狀態的進程(線程)的總數,不會超過是CPU的總核數;

  • 阻塞狀態(Blocked): 進程處於等待某一事件而放棄CPU,暫停運行。阻塞狀態分3類:
    • 阻塞在對象等待池:當進程在運行時執行Object.wait()方法,虛擬機會把線程放入等待池;
    • 阻塞在對象鎖池 :當進程在運行時企圖獲取已經被其他進程占用的同步鎖時,虛擬機會把線程放入鎖池;
    • 其他阻塞狀態 :當進程在運行時執行Sleep()方法,或調用其他進程的join()方法,或者發出I/O請求時,進入該阻塞狀態。
  • 死亡狀態(dead):進程正在被結束,這可能是進程正常結束或其他原因中斷退出運行。
    • 進程結束運行前,系統必須置進程為dead態,再處理資源釋放和回收等工作。

二、狀態轉移

process_status

  1. Runnable -> Running: 就緒態的進程獲得了CPU的時間片,進入運行態;
  2. Running -> Runnable: 運行態的進程在時間片用完後,必須出讓CPU,進入就緒態;
  3. Running -> Blocked: 當進程請求資源的使用權(如外設)或等待事件發生(如I/O完成)時,由運行態轉換為阻塞態;
  4. Blocked -> Runnable: 當進程已經獲取所需資源的使用權或者等待事件已完成時,中斷處理程序必須把相應進程的狀態由阻塞態轉為就緒態;

三、小結

進程的狀態轉移,主要圍繞Runnable、Running、Blocked三個狀態。Runnable與Running之間的轉換,更多的是與調度器Scheduler相關,而Blocked狀態主要涉及資源的使用權問題。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved