Activity的生命周期

一.Activity的方法的介紹

onCreate : 該方法是在Activity被創(chuàng)建時(shí)回調(diào),它是生命周期第一個(gè)調(diào)用的方法,我們?cè)趧?chuàng)建Activity時(shí)一般都需要重寫(xiě)該方法,然后在該方法中做一些初始化的操作,如通過(guò)setContentView設(shè)置界面布局的資源,初始化所需要的組件信息等。

onStart : 此方法被回調(diào)時(shí)表示Activity正在啟動(dòng),此時(shí)Activity已處于可見(jiàn)狀態(tài),只是還沒(méi)有在前臺(tái)顯示,因此無(wú)法與用戶(hù)進(jìn)行交互??梢院?jiǎn)單理解為Activity已顯示而我們無(wú)法看見(jiàn)擺了。

onResume : 當(dāng)此方法回調(diào)時(shí),則說(shuō)明Activity已在前臺(tái)可見(jiàn),可與用戶(hù)交互了(處于前面所說(shuō)的Active/Running形態(tài)),onResume方法與onStart的相同點(diǎn)是兩者都表示Activity可見(jiàn),只不過(guò)onStart回調(diào)時(shí)Activity還是后臺(tái)無(wú)法與用戶(hù)交互,而onResume則已顯示在前臺(tái),可與用戶(hù)交互。當(dāng)然從流程圖,我們也可以看出當(dāng)Activity停止后(onPause方法和onStop方法被調(diào)用),重新回到前臺(tái)時(shí)也會(huì)調(diào)用onResume方法,因此我們也可以在onResume方法中初始化一些資源,比如重新初始化在onPause或者onStop方法中釋放的資源。

onPause : 此方法被回調(diào)時(shí)則表示Activity正在停止(Paused形態(tài)),一般情況下onStop方法會(huì)緊接著被回調(diào)。但通過(guò)流程圖我們還可以看到一種情況是onPause方法執(zhí)行后直接執(zhí)行了onResume方法,這屬于比較極端的現(xiàn)象了,這可能是用戶(hù)操作使當(dāng)前Activity退居后臺(tái)后又迅速地再回到到當(dāng)前的Activity,此時(shí)onResume方法就會(huì)被回調(diào)。當(dāng)然,在onPause方法中我們可以做一些數(shù)據(jù)存儲(chǔ)或者動(dòng)畫(huà)停止或者資源回收的操作,但是不能太耗時(shí),因?yàn)檫@可能會(huì)影響到新的Activity的顯示——onPause方法執(zhí)行完成后,新Activity的onResume方法才會(huì)被執(zhí)行。

onStop : 一般在onPause方法執(zhí)行完成直接執(zhí)行,表示Activity即將停止或者完全被覆蓋(Stopped形態(tài)),此時(shí)Activity不可見(jiàn),僅在后臺(tái)運(yùn)行。同樣地,在onStop方法可以做一些資源釋放的操作(不能太耗時(shí))。

onRestart :表示Activity正在重新啟動(dòng),當(dāng)Activity由不可見(jiàn)變?yōu)榭梢?jiàn)狀態(tài)時(shí),該方法被回調(diào)。這種情況一般是用戶(hù)打開(kāi)了一個(gè)新的Activity時(shí),當(dāng)前的Activity就會(huì)被暫停(onPause和onStop被執(zhí)行了),接著又回到當(dāng)前Activity頁(yè)面時(shí),onRestart方法就會(huì)被回調(diào)。

onDestroy :此時(shí)Activity正在被銷(xiāo)毀,也是生命周期最后一個(gè)執(zhí)行的方法,一般我們可以在此方法中做一些回收工作和最終的資源釋放。

下面我們通過(guò)程序來(lái)驗(yàn)證上面流程中的幾種比較重要的情況,同時(shí)觀察生命周期方法的回調(diào)時(shí)機(jī)。

二、方法之間的區(qū)別

1.?onCreate和onStart之間有什么區(qū)別?

(1)可見(jiàn)與不可見(jiàn)的區(qū)別。前者不可見(jiàn),后者可見(jiàn)。

(2)執(zhí)行次數(shù)的區(qū)別。onCreate方法只在Activity創(chuàng)建時(shí)執(zhí)行一次,而onStart方法在Activity的切換以及按Home鍵返回桌面再切回應(yīng)用的過(guò)程中被多次調(diào)用。因此Bundle數(shù)據(jù)的恢復(fù)在onStart中進(jìn)行比onCreate中執(zhí)行更合適。

(3)onCreate能做的事onStart其實(shí)都能做,但是onstart能做的事onCreate卻未必適合做。如前文所說(shuō)的,setContentView和資源初始化在兩者都能做,然而想動(dòng)畫(huà)的初始化在onStart中做比較好。

2.onStart方法和onResume方法有什么區(qū)別?

(1)是否在前臺(tái)。onStart方法中Activity可見(jiàn)但不在前臺(tái),不可交互,而在onResume中在前臺(tái)。

(2)職責(zé)不同,onStart方法中主要還是進(jìn)行初始化工作,而onResume方法,根據(jù)官方的建議,可以做開(kāi)啟動(dòng)畫(huà)和獨(dú)占設(shè)備的操作。

3.onPause方法和onStop方法有什么區(qū)別?

(1)是否可見(jiàn)。onPause時(shí)Activity可見(jiàn),onStop時(shí)Activity不可見(jiàn),但Activity對(duì)象還在內(nèi)存中。

(2)在系統(tǒng)內(nèi)存不足的時(shí)候可能不會(huì)執(zhí)行onStop方法,因此程序狀態(tài)的保存、獨(dú)占設(shè)備和動(dòng)畫(huà)的關(guān)閉、以及一些數(shù)據(jù)的保存最好在onPause中進(jìn)行,但要注意不能太耗時(shí)。

4.onStop方法和onDestroy方法有什么區(qū)別?

onStop階段Activity還沒(méi)有被銷(xiāo)毀,對(duì)象還在內(nèi)存中,此時(shí)可以通過(guò)切換Activity再次回到該Activity,而onDestroy階段Acivity被銷(xiāo)毀



? 1.為什么切換Activity時(shí)各方法的執(zhí)行次序是(A)onPause→(B)onCreate→(B)onStart→(B)onResume→(A)onStop而不是(A)onPause→(A)onStop→(B)onCreate→(B)onStart→(B)onResume

(1)一個(gè)Activity或多或少會(huì)占有系統(tǒng)資源,而在官方的建議中,onPause方法將會(huì)釋放掉很多系統(tǒng)資源,為切換Activity提供流暢性的保障,而不需要再等多兩個(gè)階段,這樣做切換更快。

(2)按照生命周期圖的表示,如果用戶(hù)在切換Activity的過(guò)程中再次切回原Activity,是在onPause方法后直接調(diào)用onResume方法的,這樣比onPause→onStop→onRestart→onStart→onResume要快得多。

2.與生命周期密切相關(guān)的onSaveInstanceState方法和onRestoreInstanceState方法在什么時(shí)候執(zhí)行?

通過(guò)閱讀源碼會(huì)發(fā)現(xiàn),當(dāng)targetSdkVersion小于3時(shí)onSaveInstanceState是在onPause方法中調(diào)用的,而大于3時(shí)是在onStop方法中調(diào)用的。

而onRestoreInstanceState是在onStart之后、onResume之前調(diào)用的。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 啟動(dòng)與銷(xiāo)毀Activity 不同于使用 main() 方法啟動(dòng)應(yīng)用的其他編程范例,Android 系統(tǒng)會(huì)通過(guò)調(diào)用對(duì)...
    安卓Boy閱讀 1,877評(píng)論 3 5
  • 您的應(yīng)用中的Activity應(yīng)該做到如下需求: 1.用戶(hù)在使用應(yīng)用時(shí)接聽(tīng)來(lái)電或切換到另一個(gè)應(yīng)用,它不會(huì)崩潰。 2....
    正陽(yáng)Android閱讀 602評(píng)論 1 0
  • 這是我第三遍看《Android開(kāi)發(fā)藝術(shù)探索》這本書(shū)了,從第一遍看的云里霧里,第二遍略微明白之后,我決定看第三遍,并...
    陳添閱讀 967評(píng)論 2 8
  • 一本android開(kāi)發(fā)程序員必讀的一本書(shū),感謝任玉剛大佬的分享 一、Activity的生命周期全面分析 典型情況下...
    kongjn閱讀 632評(píng)論 1 3
  • 序言 原本以為這本書(shū)是講產(chǎn)品如何從客戶(hù)那里總結(jié)故事的方法和具體事例的,通過(guò)序言發(fā)現(xiàn)和開(kāi)始的認(rèn)知完全不同,書(shū)中應(yīng)該把...
    tiancijiaren閱讀 831評(píng)論 0 0

友情鏈接更多精彩內(nèi)容