編輯:Android開發實例
應用程序組件有一個生命周期——一開始Android實例化他們響應意圖,直到結束實例被銷毀。在這期間,他們有時候處於激活狀態,有時候處於非激活狀態;對於活動,對用戶有時候可見,有時候不可見。組件生命周期將討論活動、服務、廣播接收者的生命周期——包括在生命周期中他們可能的狀態、通知狀態改變的方法、及這些狀態的組件寄宿的進程被終結和實例被銷毀的可能性。
本文主要討論活動的生命周期及他們可能的狀態、通知狀態改變的方法。分為以下三部分:
一個活動有三個基本狀態:
如果一個活動被暫停或停止,系統可以將它從內存移除,通過要求它結束(通過調用它的finish()方法),或簡單地殺掉它的進程。當它再次顯示給用戶時,必須要完全重新啟動和恢復到之前的狀態。隨著活動從一個狀態轉為另一個狀態,通過調用下面的受保護的方法通知該改變:
所有這些方法都是鉤子,你可以重寫當狀態改變時做適當的工作。所有的活動必須要實現onCreate()去做一些初始化的設置,當對象第一次實例化的時候。很多活動也會實現onPause()去提交數據修改或准備停止與用戶交互。
將他們合並在一起,這七個方法定義了活動的整個生命周期。有三個嵌套的循環,你可以通過這七個方法監視:
下面這個圖解釋了這三個循環和狀態之間狀態的可能路徑。著色的橢圓表示活動的主要狀態,矩形表示當活動在狀態之間轉換時你可以執行的回調方法。
圖1、活動生命周期(來源:Android SDK)
下面的表格對每個方法更詳細的描述和在活動的整個生命周期中的定位。
注意上面表格的Killable列,它表示當方法返回時沒有執行活動的其它代碼,系統是否能殺死活動寄宿的進程。三個方法(onPause()、onStop()、onDestroy())標記為Yes。因為onPause()是唯一一個保證在進程被殺之前會調用的,因此你應該使用onPause()來寫任何持久化存儲數據。
被標記為No的方法保護活動寄宿的進程在他們調用的時候不會被殺掉。因此活動是可殺掉狀態,例如onPause()返回到onResume()調用期間。直到onPause()再次返回,活動是不可殺掉的。其實,沒有標記為Killable的活動也是可以系統被殺掉的,不過這僅僅發生在極端困難的情況下,沒有有任何其他資源可用。
當系統而不是用戶關閉一個活動來節省內存時,用戶可能希望返回到活動且是它之前的狀態。為了獲得活動被殺之前的狀態,你可以執行活動的onSaveInstanceState()方法。Android在活動容易被銷毀前調用這個方法,也就是調用onPause()之前。該方法的參數是一個Bundle對象,在這個對象你可以以名值對記錄活動的動態狀態。當活動再次啟動時,Bundle同時被傳遞到onCreate()和調用onCreate()之後的方法,onRestoreInstanceState(),因此使用一個或兩個可以重新創建捕獲的狀態。
因為onSaveInstanceState()方法不總是被調用,你應該僅使用onSaveInstanceState()它來記錄活動的臨時狀態,而不是持久的數據。應該使用onPause()來存儲持久數據。
當一個活動啟動另一個活動,他們都經歷生命周期轉換。一個暫停或許是停止,然而另一個啟動。有時,你可能需要協調這些活動。生命周期的回調順序是明確界定的,特別是當這兩個活動在同一個進程中:
轉自:http://www.cnblogs.com/skynet/archive/2010/05/05/1727645.html
EditText和AutoCompleteTextView設置文字選中顏色 大多數Android Rom上,文本選擇的背景色都是很好看的鮮綠色, 但是在某些垃圾的
前文簡單介紹了Android中SurfaceView的基本使用,本文就來介紹一下SurfaceView與多線程的混搭。SurfaceView與多線程混搭,是為了防
可以顯示在的Android任務,通過加載進度條的進展。進度條有兩種形狀。加載欄和加載微調(spinner)。在本章中,我們將討論微調(spinner)。Spinner 用
可以顯示在的Android任務,通過加載進度條的進展。進度條有兩種形狀。加載欄和加載微調(spinner)。在本章中,我們將討論微調(spinner)。Spinner 用