普通的Activity跳轉(zhuǎn)生命周期變化
-
MainActivity 啟動(dòng)
D/LUtil: MainActivity onCreate() D/LUtil: MainActivity onStart() D/LUtil: MainActivity onResume() -
跳轉(zhuǎn)到 SecondActivity
D/LUtil: MainActivity onPause() D/LUtil: SecondActivity onCreate() D/LUtil: SecondActivity onStart() D/LUtil: SecondActivity onResume() D/LUtil: MainActivity onStop() -
SecondActivity 返回
D/LUtil: SecondActivity onPause() D/LUtil: MainActivity onStart() D/LUtil: MainActivity onResume() D/LUtil: SecondActivity onStop() D/LUtil: SecondActivity onDestroy() -
MainActivity 返回
D/LUtil: MainActivity onPause() D/LUtil: MainActivity onStop() D/LUtil: MainActivity onDestroy()
finish() 函數(shù)在不同生命周期方法中的調(diào)用
-
onCreate() 中調(diào)用
D/LUtil: MainActivity onCreate() D/LUtil: MainActivity onDestroy() -
onStart() 中調(diào)用
D/LUtil: MainActivity onCreate() D/LUtil: MainActivity onStart() D/LUtil: MainActivity onStop() D/LUtil: MainActivity onDestroy() -
onResume() 中調(diào)用
D/LUtil: MainActivity onCreate() D/LUtil: MainActivity onStart() D/LUtil: MainActivity onResume() D/LUtil: MainActivity onPause() D/LUtil: MainActivity onStop() D/LUtil: MainActivity onDestroy()
Activity 跳轉(zhuǎn)時(shí) finish() 函數(shù)調(diào)用
-
onPause() 中調(diào)用
// MainActivity啟動(dòng) D/LUtil: MainActivity onCreate() D/LUtil: MainActivity onStart() D/LUtil: MainActivity onResume() // 點(diǎn)擊跳轉(zhuǎn)Button D/LUtil: MainActivity onPause() D/LUtil: SecondActivity onCreate() D/LUtil: SecondActivity onStart() D/LUtil: SecondActivity onResume() D/LUtil: MainActivity onStop() D/LUtil: MainActivity onDestroy() // 按返回鍵 D/LUtil: SecondActivity onPause() D/LUtil: SecondActivity onStop() D/LUtil: SecondActivity onDestroy() -
onStop() 中調(diào)用
D/LUtil: MainActivity onCreate() D/LUtil: MainActivity onStart() D/LUtil: MainActivity onResume() // 點(diǎn)擊跳轉(zhuǎn)Button D/LUtil: MainActivity onPause() D/LUtil: SecondActivity onCreate() D/LUtil: SecondActivity onStart() D/LUtil: SecondActivity onResume() D/LUtil: MainActivity onStop() // 按返回鍵 D/LUtil: SecondActivity onPause() D/LUtil: SecondActivity onStop() D/LUtil: SecondActivity onDestroy() D/LUtil: MainActivity onDestroy()
Activity 生命周期

-
onCreate()
首次創(chuàng)建 Activity 時(shí)調(diào)用。 您應(yīng)該在此方法中執(zhí)行所有正常的靜態(tài)設(shè)置 — 創(chuàng)建視圖、將數(shù)據(jù)綁定到列表等等。 系統(tǒng)向此方法傳遞一個(gè) Bundle 對(duì)象,其中包含 Activity 的上一狀態(tài)(保存的狀態(tài)),不過(guò)前提是保存了該狀態(tài)。始終后接 onStart()。
-
onRestart()
在 Activity 已停止并即將再次啟動(dòng)前調(diào)用。始終后接 onStart()
-
onStart()
在 Activity 即將對(duì)用戶可見之前調(diào)用。(可見而用戶沒有焦點(diǎn))
如果 Activity 轉(zhuǎn)入前臺(tái),則后接 onResume(),如果 Activity 轉(zhuǎn)入隱藏狀態(tài),則后接 onStop()。 -
onResume()
在 Activity 即將開始與用戶進(jìn)行交互之前調(diào)用。 此時(shí),Activity 處于 Activity 堆棧的頂層,并具有用戶輸入焦點(diǎn)。
始終后接 onPause()。 -
onPause()
當(dāng)系統(tǒng)即將開始繼續(xù)另一個(gè) Activity 時(shí)調(diào)用。 此方法通常用于確認(rèn)對(duì)持久性數(shù)據(jù)的未保存更改、停止動(dòng)畫以及其他可能消耗 CPU 的內(nèi)容,諸如此類。 它應(yīng)該非常迅速地執(zhí)行所需操作,因?yàn)樗祷睾螅乱粋€(gè) Activity 才能繼續(xù)執(zhí)行。
如果 Activity 返回前臺(tái),則后接 onResume(),如果 Activity 轉(zhuǎn)入對(duì)用戶不可見狀態(tài),則后接 onStop()。 -
onStop()
在 Activity 對(duì)用戶不再可見時(shí)調(diào)用。如果 Activity 被銷毀,或另一個(gè) Activity(一個(gè)現(xiàn)有 Activity 或新 Activity)繼續(xù)執(zhí)行并將其覆蓋,就可能發(fā)生這種情況。
如果 Activity 恢復(fù)與用戶的交互,則后接 onRestart(),如果 Activity 被銷毀,則后接 onDestroy()。 -
onDestroy()
在 Activity 被銷毀前調(diào)用。這是 Activity 將收到的最后調(diào)用。 當(dāng) Activity 結(jié)束(有人對(duì) Activity 調(diào)用了 finish()),或系統(tǒng)為節(jié)省空間而暫時(shí)銷毀該 Activity 實(shí)例時(shí),可能會(huì)調(diào)用它。 您可以通過(guò) isFinishing() 方法區(qū)分這兩種情形。
這些方法共同定義 Activity 的整個(gè)生命周期。您可以通過(guò)實(shí)現(xiàn)這些方法監(jiān)控 Activity 生命周期中的三個(gè)嵌套循環(huán):
Activity 的整個(gè)生命周期發(fā)生在 onCreate() 調(diào)用與 onDestroy() 調(diào)用之間。您的 Activity 應(yīng)在 onCreate() 中執(zhí)行“全局”狀態(tài)設(shè)置(例如定義布局),并釋放 onDestroy() 中的所有其余資源。例如,如果您的 Activity 有一個(gè)在后臺(tái)運(yùn)行的線程,用于從網(wǎng)絡(luò)上下載數(shù)據(jù),它可能會(huì)在 onCreate() 中創(chuàng)建該線程,然后在 onDestroy() 中停止該線程。
Activity 的可見生命周期發(fā)生在 onStart() 調(diào)用與 onStop() 調(diào)用之間。在這段時(shí)間,用戶可以在屏幕上看到 Activity 并與其交互。 例如,當(dāng)一個(gè)新 Activity 啟動(dòng),并且此 Activity 不再可見時(shí),系統(tǒng)會(huì)調(diào)用 onStop()。您可以在調(diào)用這兩個(gè)方法之間保留向用戶顯示 Activity 所需的資源。 例如,您可以在 onStart() 中注冊(cè)一個(gè) BroadcastReceiver 以監(jiān)控影響 UI 的變化,并在用戶無(wú)法再看到您顯示的內(nèi)容時(shí)在 onStop() 中將其取消注冊(cè)。在 Activity 的整個(gè)生命周期,當(dāng) Activity 在對(duì)用戶可見和隱藏兩種狀態(tài)中交替變化時(shí),系統(tǒng)可能會(huì)多次調(diào)用 onStart() 和 onStop()。
Activity 的前臺(tái)生命周期發(fā)生在 onResume() 調(diào)用與 onPause() 調(diào)用之間。在這段時(shí)間,Activity 位于屏幕上的所有其他 Activity 之前,并具有用戶輸入焦點(diǎn)。 Activity 可頻繁轉(zhuǎn)入和轉(zhuǎn)出前臺(tái) — 例如,當(dāng)設(shè)備轉(zhuǎn)入休眠狀態(tài)或出現(xiàn)對(duì)話框時(shí),系統(tǒng)會(huì)調(diào)用 onPause()。 由于此狀態(tài)可能經(jīng)常發(fā)生轉(zhuǎn)變,因此這兩個(gè)方法中應(yīng)采用適度輕量級(jí)的代碼,以避免因轉(zhuǎn)變速度慢而讓用戶等待。
管理 Activity 生命周期
通過(guò)實(shí)現(xiàn)回調(diào)方法管理 Activity 的生命周期對(duì)開發(fā)強(qiáng)大而又靈活的應(yīng)用至關(guān)重要。 Activity 的生命周期會(huì)直接受到 Activity 與其他 Activity、其任務(wù)及返回棧的關(guān)聯(lián)性的影響。
Activity 基本上以三種狀態(tài)存在:
-
運(yùn)行中
此 Activity 位于屏幕前臺(tái)并具有用戶焦點(diǎn)。
-
暫停
另一個(gè) Activity 位于屏幕前臺(tái)并具有用戶焦點(diǎn),但此 Activity 仍可見。也就是說(shuō),另一個(gè) Activity 顯示在此 Activity 上方,并且該 Activity 部分透明或未覆蓋整個(gè)屏幕。 暫停的 Activity 處于完全活動(dòng)狀態(tài)(Activity 對(duì)象保留在內(nèi)存中,它保留了所有狀態(tài)和成員信息,并與窗口管理器保持連接),但在內(nèi)存極度不足的情況下,可能會(huì)被系統(tǒng)終止。
-
停止
該 Activity 被另一個(gè) Activity 完全遮蓋(該 Activity 目前位于“后臺(tái)”)。 已停止的 Activity 同樣仍處于活動(dòng)狀態(tài)(Activity 對(duì)象保留在內(nèi)存中,它保留了所有狀態(tài)和成員信息,但未與窗口管理器連接)。 不過(guò),它對(duì)用戶不再可見,在他處需要內(nèi)存時(shí)可能會(huì)被系統(tǒng)終止。
如果 Activity 處于暫?;蛲V?fàn)顟B(tài),系統(tǒng)可通過(guò)要求其結(jié)束(調(diào)用其 finish() 方法)或直接終止其進(jìn)程,將其從內(nèi)存中刪除。(將其結(jié)束或終止后)再次打開 Activity 時(shí),必須重建。