普通的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ì)用戶可見(jiàn)之前調(diào)用。(可見(jiàn)而用戶沒(méi)有焦點(diǎn))
如果 Activity 轉(zhuǎn)入前臺(tái)世澜,則后接 onResume()独旷,如果 Activity 轉(zhuǎn)入隱藏狀態(tài),則后接 onStop()。 -
onResume()
在 Activity 即將開(kāi)始與用戶進(jìn)行交互之前調(diào)用嵌洼。 此時(shí)案疲,Activity 處于 Activity 堆棧的頂層,并具有用戶輸入焦點(diǎn)麻养。
始終后接 onPause()褐啡。 -
onPause()
當(dāng)系統(tǒng)即將開(kāi)始繼續(xù)另一個(gè) Activity 時(shí)調(diào)用。 此方法通常用于確認(rèn)對(duì)持久性數(shù)據(jù)的未保存更改鳖昌、停止動(dòng)畫(huà)以及其他可能消耗 CPU 的內(nèi)容备畦,諸如此類。 它應(yīng)該非常迅速地執(zhí)行所需操作许昨,因?yàn)樗祷睾蠖危乱粋€(gè) Activity 才能繼續(xù)執(zhí)行。
如果 Activity 返回前臺(tái)糕档,則后接 onResume()莉恼,如果 Activity 轉(zhuǎn)入對(duì)用戶不可見(jiàn)狀態(tài),則后接 onStop()速那。 -
onStop()
在 Activity 對(duì)用戶不再可見(jiàn)時(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 的可見(jiàn)生命周期發(fā)生在 onStart() 調(diào)用與 onStop() 調(diào)用之間谋币。在這段時(shí)間仗扬,用戶可以在屏幕上看到 Activity 并與其交互。 例如蕾额,當(dāng)一個(gè)新 Activity 啟動(dòng)早芭,并且此 Activity 不再可見(jiàn)時(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ì)用戶可見(jiàn)和隱藏兩種狀態(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ì)開(kāi)發(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 仍可見(jiàn)。也就是說(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ì)用戶不再可見(jiàn)丁眼,在他處需要內(nèi)存時(shí)可能會(huì)被系統(tǒng)終止筷凤。
如果 Activity 處于暫停或停止?fàn)顟B(tài)苞七,系統(tǒng)可通過(guò)要求其結(jié)束(調(diào)用其 finish() 方法)或直接終止其進(jìn)程藐守,將其從內(nèi)存中刪除。(將其結(jié)束或終止后)再次打開(kāi) Activity 時(shí)蹂风,必須重建卢厂。