Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> 我的Android學習之旅[4]——Android應用程序的生命周期

我的Android學習之旅[4]——Android應用程序的生命周期

編輯:Android開發實例

      在對一個簡單的Hello World工程進行項目結構剖析後,我們接著來學習下一個Android應用程序的生命周期是怎麼樣的,以便為後面的開發有個墊下良好的基石~

      所謂的應用程序生命周期無非就是應用程序進程從創建到消亡的整個過程。但是,之所有將這一點拎出來單獨的講,當然有其特殊性。的確,Android應用程序的生命周期的終結這個動作並非由應用程序進程本身執行,而是取決於Android系統,也就是Android應用程序生死由“天”,不能主宰自己的命運。這與我們傳統的編程思維可能有所程序,如最初學的C語言程序都是最後收到內部或者外部退出請求而運行中的進程從main函數通過return退出,而非由系統直接kill的,這樣的情況很少。那麼,Android的設計師們為什麼如此設計呢?這樣設計的好處是什麼呢?

      其實,主流智能手機大多數都是多任務型,筆者常常用自己的手機一邊游戲一邊聽音樂同時可能還開著UCWeb和QQ,的確這樣給用戶帶來的體驗是無以倫比的。但是,一個不容忽視的問題就是,手機的內存只有那麼多,隨著我們打開的應用程序數量的增多,隨之而來的可能會是應用程序響應時間過長或者系統假死的糟糕情況。所以,若將Android應用程序生命周期便交由系統處理的話,那麼在系統內存不足的情況下,便由Android系統捨車保帥,選擇性的來中止一些重要性較次的應用程序,以便回收內存供更重要的應用程序使用。

      那麼,系統是根據一個怎樣的重要性標准來中止Android應用程序的呢?其實,Android中根據應用程序的組件以及組件當前運行狀態將所有的進程按重要性程度從高到低劃分成五個,如下圖所示:

       

      

       ²  前台進程

          顧名思義,前台進程就是在屏幕最前端顯示並和用戶交互的Activity進程或者該進程的一個BroadcastReceiver正在運行。這樣的進程重要性最高,在系統中也     只有少數這樣的進程。除非在系統內存非常低,萬不得已的情況下才會被中止,否則系統不會選擇中止前台進程。

          一般而言,滿足以下條件之一即可視為前台進程

1)      進程正在最前端運行一個和用戶交互的Activity(其OnResume()方法將被調用)

2)      進程有一個正在運行的BroadcastReceiver(它的BroadcastRecevicer.onReceive()方法正在被執行) 

3)      進程有一個Service,並且在Service的某個回調函數內正有執行的代碼

 

       ² 可見進程

            可見進程是指那些對於用戶可見,但是不顯示在屏幕的最前端的進程。可見進程的重要程度也是很高的,通常不會被系統所中止,除非處於捨車保帥的情況,      為了保持所有的前台進程的正常運行而不得不中止可見進程。

一般而言,滿足以下條件之一即可視為可見進程

1)有一個非前台但是仍然對用戶可見的activity(onPause()方法被調用)。例如:當前的前台的activity是一個對話框,上一個activity還是可見的

2)具有一個綁定到可見activity的service

 

       ² 服務進程

             服務進程是擁有Service的進程,該Service是有startService()方法啟動的,這些進程通常運行在後台,並且對用戶是不可見的。但是,這些進程所作的工      作卻也是比較重要的,如在後台進行播放音樂的工作。所以,除非在保證前兩種高級別的進程能正常工作的情況下,否則系統一般不會中止服務進程的。

 

       ² 後台進程

             後台進程運行著對用戶不可見的activity(調用過onStop()方法),這些進程對用戶體驗沒有直接的影響,可以在上述進程需要內存資源的時候,從後台進程      這回收。通常,系統中有很多的不可見的進程在運行,這些都保存在LRU(least last used)列表中,以便內存不足的時候會在第一時間被回收。當需要中止進程      的時候,系統會保證最近一個被用戶看到的進程最後一個被中止。

 

       ² 空進程

             在空進程中無任何的應用程序組件,而這種進程存在的唯一理由是提供一種緩存機制,使得縮短應用程序下次啟動所需的時間。系統會經常的中止空進程,      從而達到調節程序緩存和系統緩存的平衡。

轉自:http://www.cnblogs.com/royenhome/archive/2010/04/25/1719854.html

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