Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android中進程的生命周期

Android中進程的生命周期

編輯:關於Android編程

進程的生命周期(Processes and lifecycles)   Android系統總是盡最大的努力來維持一個應用的進程,但系統的內存不足時就可能需要關閉一些舊的進程了,但是決定關閉哪個進程呢,android系統把所以的進程放進一個重要性樹裡,最低重要性的進程將會被停止,系統有5種重要性等級,重要性從高到低如下:   (1)、前台進程。一個前台進程是當前執行用戶請求的進程,如果有如下的一種情形的那麼他就是前台進程:   a、這個進程裡運行著一個正在和用戶交互的Activity(這個Activity的onResume()方法被調用)。   b、這個進程裡有綁定到當前正在和用戶交互的Activity的一個service   c、這個進程裡有一個service對象,這個service對象執行了至少一個他生命周期的函數(onCreate(), onStart(), or onDestroy()).   d、這個進程裡有一個執行了onReceive()方法的broadcastreceiver對象   只有一定數量的前台進程在任何時間都存在,他們只有在最後的時刻被停止---系統的內存太少了而不能運行這些僅有的前台進程了),一般的,在那個時刻,手機會重新設置內存頁的狀態,所以停止一些前台的進程是為了保持對用戶操作的快速響應。   (2)可見進程。一個可見進程一個沒有任何前台顯示的組件,但是仍然可以影響到用戶當前屏幕所看見的東西,如果有如下的一種情形那麼他就是可見進程。    a、 這個進程裡一個Activity,但是這個Activity當前不是在前台顯示,但是仍然對用戶是可見的(這個Activity的onPause()方法 被調用),比如說一個Activity調用一個dialog,那麼這個dialog是當前顯示的組件,這個Activity不是在前台顯示,但是對用戶是 可見的。   b、 這個進程裡有一個綁定到一個可見Activity(如上所述的Activity)的service   一個可見進程是極端重要的,只有在為了顯示所有前台進程時,即顯示前台進程都不夠時,才會停止可見進程。    (3)、服務進程。一個服務進程是一個通過startService()啟動的但是沒有在前兩個分類中的進程,雖然服務進程不是用戶直接能看見的,但是 他也總是做一些用戶很關心的事(如在後台播放mp3,從網絡上下載東西),所以系統會一直保持服務進程運行,除非內存不足以運行服務進程,前台進程,可見 進程。   (4)後台進程。一個後台進程是運行一個當前對用戶是不可見的Activity(這個Activity的onStop()被調用),這 些進程對用戶體驗沒有什麼直接的影響,當內存不足以運行前台進程,可見進程,服務進程時,可以隨時停止後台進程,通常有很多的後台進程在運行,系統會把這 些後台進程放進一個LRU中(最近使用隊列),最近使用的就最後停止。   (5)空進程。一個空進程就是進程裡沒有任何活動的應用組件,維持這種進程的唯一原因就是作為一種緩存,當一個組件需要啟動時加快啟動的速度,系統為了平衡進程緩存和核心緩存會停止這些空的進程。   Android系統會取一個進程裡的所以組件的最高重要性來安排進程的重要性,比如說,一個進程裡有一個service和一個可見的Activity,那麼這個進程會被安排成一個可見進程,而不是服務進程。   另外,一個進程的重要性有可能會因為其他進程的依賴而升高,一個進程不能比他所服務的進程的重要性低,比如有進程A裡的service綁定到了進程B的組件上,那麼進程A的重要性至少和進程B的一樣,或者更高。    因為一個服務進程的重要性比運行一個後台Activity的進程高,所以,當一個Activity做一些長時間運行的任務時,最好啟動一個 service來做,而不是放到一個線程裡去做,特別是這個任務的時間可能比Activity運行的時間還長的時候,比如在後台播放音樂,或者上傳一張圖 片到網上,使用一個service保證了這個任務至少是服務進程的重要性,broadcast receiver也是一樣,長時間運行的任務也最好是放到一個service裡,而不是放到一個線程裡。
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved