Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> Android開發之旅:組件生命周期(一)

Android開發之旅:組件生命周期(一)

編輯:Android開發實例

引言

應用程序組件有一個生命周期——一開始Android實例化他們響應意圖,直到結束實例被銷毀。在這期間,他們有時候處於激活狀態,有時候處於非激活狀態;對於活動,對用戶有時候可見,有時候不可見。組件生命周期將討論活動、服務、廣播接收者的生命周期——包括在生命周期中他們可能的狀態、通知狀態改變的方法、及這些狀態的組件寄宿的進程被終結和實例被銷毀的可能性。

本文主要討論活動的生命周期及他們可能的狀態、通知狀態改變的方法。分為以下三部分:

  • 1、活動生命周期
  • 2、保存活動狀態
  • 3、協調活動

1、活動生命周期

一個活動有三個基本狀態:

  • 激活狀態運行狀態,這時它運行在屏幕的前台(處於當前任務活動棧的最上面)。這個活動有用戶的操作的焦點。
  • 暫停狀態,這時活動失去焦點但是它對用戶仍可見。也就是說,另一個活動在它的上面且那個活動是透明的或者沒有覆蓋整個屏幕,因此通過它可以看見暫停狀態的活動。一個暫停的活動完全是活著的(它維護著所有的狀態和成員信息,且仍然依附在窗口管理器),但是當內存極小時可以被系統殺掉。
  • 停止狀態,這時活動完全被其他活動掩蓋。它仍然保留所有狀態和成員信息,但是對用戶它不可見,因此它的窗口時隱藏的且當其他地方需要內存時它往往被系統殺掉。

如果一個活動被暫停或停止,系統可以將它從內存移除,通過要求它結束(通過調用它的finish()方法),或簡單地殺掉它的進程。當它再次顯示給用戶時,必須要完全重新啟動和恢復到之前的狀態。隨著活動從一個狀態轉為另一個狀態,通過調用下面的受保護的方法通知該改變:

  • void onCreate(Bundle saveInstanceState)
  • void onStart()
  • void onRestart()
  • void onResume()
  • void onPause()
  • void onStop()
  • void onDestroy()

所有這些方法都是鉤子,你可以重寫當狀態改變時做適當的工作。所有的活動必須要實現onCreate()去做一些初始化的設置,當對象第一次實例化的時候。很多活動也會實現onPause()去提交數據修改或准備停止與用戶交互。

將他們合並在一起,這七個方法定義了活動的整個生命周期。有三個嵌套的循環,你可以通過這七個方法監視:

  • 活動的整個生命時間,從第一次調用onCreate()開始直到調用onDestroy()結束。一個活動在onCreate()中做所有的“全局”狀態的初始設置,在onDestroy()中釋放所有保留的資源。舉例來說,有一個線程運行在後台從網絡上下載數據,它可能會在onCreate()中創建線程,在onDestroy()中結束線程。
  • 活動的可視生命時間,從調用onStart()到相應的調用onStop() 。在這期間,用戶可以在屏幕上看見活動,雖然它可能不是運行在前台且與用戶交互。在這兩個方法之間,你可以保持顯示活動所需要的資源。舉例來說,你可以在onStart()中注冊一個廣播接收者監視影響你的UI的改變,在onStop() 中注銷。因為活動在可視和隱藏之間來回切換,onStart()onStop()  可以調用多次。
  • 活動的前台生命時間,從調用onResume()到相應的調用onPause()。在這期間,頻繁地在重用和暫停狀態轉換——例如,當設備進入睡眠狀態或一個新的活動啟動時調用onPause(),當一個活動返回或一個新的意圖被傳輸時調用onResume()。因此,這兩個方法的代碼應當是相當輕量級的。

下面這個圖解釋了這三個循環和狀態之間狀態的可能路徑。著色的橢圓表示活動的主要狀態,矩形表示當活動在狀態之間轉換時你可以執行的回調方法。

 

 

圖1、活動生命周期(來源:Android SDK)

下面的表格對每個方法更詳細的描述和在活動的整個生命周期中的定位。

注意上面表格的Killable列,它表示當方法返回時沒有執行活動的其它代碼,系統是否能殺死活動寄宿的進程。三個方法(onPause()onStop()onDestroy())標記為Yes。因為onPause()是唯一一個保證在進程被殺之前會調用的,因此你應該使用onPause()來寫任何持久化存儲數據。

被標記為No的方法保護活動寄宿的進程在他們調用的時候不會被殺掉。因此活動是可殺掉狀態,例如onPause()返回到onResume()調用期間。直到onPause()再次返回,活動是不可殺掉的。其實,沒有標記為Killable的活動也是可以系統被殺掉的,不過這僅僅發生在極端困難的情況下,沒有有任何其他資源可用。

2、保存活動狀態

當系統而不是用戶關閉一個活動來節省內存時,用戶可能希望返回到活動且是它之前的狀態。為了獲得活動被殺之前的狀態,你可以執行活動的onSaveInstanceState()方法。Android在活動容易被銷毀前調用這個方法,也就是調用onPause()之前。該方法的參數是一個Bundle對象,在這個對象你可以以名值對記錄活動的動態狀態。當活動再次啟動時,Bundle同時被傳遞到onCreate()和調用onCreate()之後的方法,onRestoreInstanceState(),因此使用一個或兩個可以重新創建捕獲的狀態。

因為onSaveInstanceState()方法不總是被調用,你應該僅使用onSaveInstanceState()它來記錄活動的臨時狀態,而不是持久的數據。應該使用onPause()來存儲持久數據。

3、協調活動

當一個活動啟動另一個活動,他們都經歷生命周期轉換。一個暫停或許是停止,然而另一個啟動。有時,你可能需要協調這些活動。生命周期的回調順序是明確界定的,特別是當這兩個活動在同一個進程中:

  1. 當前活動的onPause()方法被調用。
  2. 接下來,啟動活動的onCreate()onStart()onResume()方法按序被調用。
  3. 然後,如果獲得不再在屏幕上可見,它的onStop()方法被調用。

轉自:http://www.cnblogs.com/skynet/archive/2010/05/05/1727645.html

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