【正文】
Android 移動(dòng)應(yīng)用設(shè)計(jì)與開發(fā) 第 4章 Activity 以及 Intent通信機(jī)制 ? Activity 生命周期 ? Activity 交互機(jī)制 ? Activity 狀態(tài) ? Activity 生命周期的事件回調(diào)方法 ? Intent ? Intent 屬性 ? Intent 解析 ? Activity的跳轉(zhuǎn) ?本章導(dǎo)讀 Activity 生命周期 在 Android應(yīng)用程序中,所有的 Android組件都有它自己的生命周期,表示從這一組件的 創(chuàng)建到銷毀 的整個(gè)過程。在這一過程中,組件會(huì)在活動(dòng)、非活動(dòng)以及可見或不可見等狀態(tài)中不斷因應(yīng)用場(chǎng)景的改變而進(jìn)行切換。這一小節(jié)中,我們將對(duì) Android系統(tǒng)中 Activity組件的生命周期進(jìn)行詳細(xì)的介紹 Activity 交互機(jī)制 ? Android針對(duì) Activity的管理使用的是 棧機(jī)制 , Activity棧保存了已經(jīng)啟動(dòng)并且沒有終止的 Activity,并遵循 “ 先進(jìn)后出 ” 的原則 ? 具體說明: 在某個(gè)時(shí)刻只有一個(gè) Activity處在棧頂,當(dāng)這個(gè) Activity被銷毀后,下面的 Activity才可能處于棧頂,或者是有一個(gè)新的 Activity被創(chuàng)建出來,則上一個(gè) Activity就被壓棧下去 ? Android按照一種 層次管理 所有的 Activity,因?yàn)?Activity是直接涉及到與用戶交互界面的處理,而任意時(shí)刻與用戶交互的界面只有一個(gè),所以 Android針對(duì)Activity的管理采用了具有 層次感的棧 的 數(shù)據(jù)結(jié)構(gòu) Activity 狀態(tài) Active /running 此時(shí) Activity一定處于屏幕的最前端,用戶完全可以看得到, 并且可以與用戶進(jìn)行交互。對(duì)于 Activity棧來說,它處于 棧頂 Paused Activity在屏幕上 仍然可見 ,但是它已經(jīng) 失去了焦點(diǎn) ,用戶不能與 之進(jìn)行交互。暫停狀態(tài)的 Activity是存活的 ,它維持著其內(nèi)部狀態(tài)和 信息,但是系統(tǒng)可能會(huì)在手機(jī)內(nèi)存極低的情況下殺掉該 Activity Stop Activity在屏幕上完全 不能被用戶看見 ,這個(gè) Activity已經(jīng)完全被其他Activity所遮住。系統(tǒng)仍然保留有其內(nèi)部狀態(tài)和成員信息,但是它經(jīng)常會(huì)由于手機(jī)系統(tǒng)內(nèi)存被征用而被系統(tǒng)殺死回收 Killed Activity被系統(tǒng)殺死 回收 或者 未啟動(dòng) Activity 狀態(tài) 四種狀態(tài)的轉(zhuǎn)換關(guān)系如圖 : A c t i v e / R u n n i n gP a u s e dK i l l e dS t o p當(dāng) 前A c t i v i t y 部分 被 遮 住當(dāng) 前 A c t i v i t y完 全 被 遮 住圖 Activity的 4種狀態(tài)之間的轉(zhuǎn)換圖 ? Activity啟動(dòng)后處于 Active/Running 狀態(tài),此時(shí) Activity處于屏幕的最上面 ? 當(dāng)用戶啟動(dòng)了新的 Activity,并且此Activity部分遮擋了當(dāng)前的 Activity或擁有透明屬性時(shí),則當(dāng)前的 Activity轉(zhuǎn)換為Paused狀態(tài),也可以從 Paused狀態(tài)到Active/Running狀態(tài) ? 當(dāng)用戶啟動(dòng)的 Activity完全遮住了當(dāng)前的Activity時(shí),則當(dāng)前的 Activity轉(zhuǎn)換為 Stop狀態(tài) ? 處于 Stop狀態(tài)的 Activity,當(dāng)手機(jī)系統(tǒng)內(nèi)存被其他應(yīng)用程序征用時(shí), Stop狀態(tài)的Activity將首先被殺死,進(jìn)入 Killed狀態(tài)。 ? Active/Running狀態(tài)的 Activity被用戶終止或是 Paused狀態(tài)及 Stop狀態(tài)的 Activity被系統(tǒng)終止后, Activity進(jìn)入了 Killed狀態(tài) Activity生命周期的事件回調(diào) 方法 事件回調(diào)函數(shù)種類 Android生命周期分類 Activity生命周期過程及狀態(tài)改變 實(shí)例 Activity生命周期的事件回調(diào) 方法 — 事件回調(diào)方法種類 Android生命周期的事件回調(diào)方法如下: ? void onCreate(Bundle savedInstanceState) ? void onStart() ? void onRestart() ? void onResume() ? void onPause() ? void onStop() ? void onDestroy() 注意: ( 1)所有的 Activiy都必須實(shí)現(xiàn) onCreate()方法,在該方法中可以對(duì) Activity進(jìn)行一些初始化設(shè)置。 ( 2)所有的 Activity生命周期方法的實(shí)現(xiàn)都必須先調(diào)用其父類的方法。 Activity生命周期的事件回調(diào)方法 —Android生命周期分類 全生命周期 可視生命周期 前臺(tái)生命周期 ? 全生命周期自第一次調(diào)用 onCreate()開始 ,直至調(diào)用 onDestroy()為止 ? Activity在 onCreate()中設(shè)置所有“全局”狀態(tài)以完成初始化 ? 在 onDestroy()中釋放所有系統(tǒng)資源 ? 可視生命周期 onStart() 開始 到 onStop()結(jié)束 ? 在此期間,用戶可以在屏幕上看到該 Activity ? 在這兩個(gè)方法中,你可以管理該 Activity的資源 ? 可以在 onStart()中注冊(cè)一個(gè) BroadcastReceiver來監(jiān)控 UI變化,而在onStop()中取消該注冊(cè) ? 前臺(tái)生命周期自onResume()調(diào)用 開始 ,至相應(yīng)的 onPause()調(diào)用 為止 ? 在此期間, Activity位于前臺(tái)最上面,可與用戶進(jìn)行交互 ? 當(dāng)設(shè)備轉(zhuǎn)入休眠狀態(tài)或有新的 Activity啟動(dòng)時(shí),將調(diào)用 onPause() 方法 ? 當(dāng) Activity接收到新的Intent的時(shí)候會(huì)調(diào)用onResume()方法 Activity生命周期的事件回調(diào)方法 — Activity生命周期過程及狀態(tài)改變 o n C r e a t e ( )A c t i v i t y 開 始o(jì) n R e s u m e ( )o n S t a r t ( )A c t i v i t y 運(yùn) 行A c t i v i t y 移 動(dòng) 到 后 臺(tái)o n P a u s e ( )A c t i v i t y 不 再 顯 示o n S t o p ( )o n D e s t r o y ( )A c t i v i t y 結(jié) 束其 他 應(yīng) 用 程 序 需 要 內(nèi) 存進(jìn) 程 被 殺 死用 戶 瀏 覽 回 到 這 個(gè) A c t i v i t yA c t i v i t y 移 動(dòng) 到 前 臺(tái)A c t i v i t y 移 動(dòng) 到 前 臺(tái)o n R e s t a r t ( )說明: ( 1) 橢圓 是 Activity可以經(jīng)歷的主要狀態(tài) (