2018-07-26 Activity(活動(dòng)) 的生命周期

一.返回棧

Android中是使用Task(任務(wù))來管理活動(dòng)的,一個(gè)任務(wù)就是一組存放在棧里面的集合,這個(gè)棧就稱為返回棧,

又棧是一種后進(jìn)先出的數(shù)據(jù)結(jié)構(gòu),每當(dāng)啟動(dòng)一個(gè)新活動(dòng)的時(shí)候,都會(huì)進(jìn)入返回棧的棧頂,而當(dāng)我們按下Back鍵或者調(diào)用finish()方法銷毀活動(dòng)時(shí),處于棧頂?shù)脑貢?huì)先出棧,之前進(jìn)入的活動(dòng)就會(huì)處于棧頂位置,系統(tǒng)總是將處于棧頂?shù)幕顒?dòng)展示給用戶


二.活動(dòng)狀態(tài)

每個(gè)活動(dòng)在其生命周期中最多可能會(huì)有四種狀態(tài)

1.運(yùn)行狀態(tài):當(dāng)一個(gè)活動(dòng)處于棧頂位置時(shí),這個(gè)活動(dòng)就處于運(yùn)行狀態(tài)

2.暫停狀態(tài):當(dāng)一個(gè)活動(dòng)不再處于棧頂位置,但任然可見,這個(gè)活動(dòng)就進(jìn)入了暫停狀態(tài),但是活動(dòng)都不在棧頂了,為什么任然可見呢?因?yàn)椴⒉皇敲總€(gè)活動(dòng)都要占據(jù)整個(gè)屏幕,比如對話框形式的活動(dòng)只會(huì)占據(jù)屏幕的一部分,處于暫停狀態(tài)的活動(dòng)任然是完全存活的,系統(tǒng)不會(huì)愿意去回收這類活動(dòng)

3.停止?fàn)顟B(tài):當(dāng)一個(gè)活動(dòng)不處于棧頂位置且不可見時(shí),這個(gè)活動(dòng)就處于暫停狀態(tài),系統(tǒng)任然會(huì)為這種活動(dòng)保存相應(yīng)的狀態(tài)和成員變量,但是這是不可靠的,當(dāng)其他地方需要內(nèi)存時(shí),處于暫停狀態(tài)的活動(dòng)有可能被系統(tǒng)回收

4.銷毀狀態(tài):活動(dòng)從返回棧中移除后就變成了銷毀狀態(tài),系統(tǒng)會(huì)回收銷毀狀態(tài)的活動(dòng),以保證內(nèi)存的充足

二,活動(dòng)的生存期

Activity類中定義了七個(gè)回調(diào)方法,覆蓋了活動(dòng)生命周期的每一個(gè)環(huán)節(jié)

1.onCreate() :每個(gè)活動(dòng)我們都重寫了onCreate() 這個(gè)方法,他會(huì)在活動(dòng)第一次創(chuàng)建的時(shí)候被調(diào)用,我們應(yīng)該在這個(gè)方法中完成初始化,加載布局一類的操作

2.onStart() :這個(gè)方法在活動(dòng)由不可見變?yōu)榭梢姇r(shí)候調(diào)用

3.onResume() :這個(gè)方法在活動(dòng)準(zhǔn)備和用戶進(jìn)行交互的時(shí)候調(diào)用,此時(shí)活動(dòng)一定處于返回棧的棧頂,且處于運(yùn)行狀態(tài)

4.onPause() :當(dāng)另一個(gè)方法啟動(dòng)時(shí)調(diào)用

5.onStop() :活動(dòng)完全不可見時(shí)調(diào)用

6.onDestroy() :這個(gè)方法在活動(dòng)被銷毀前調(diào)用,之后活動(dòng)的狀態(tài)變?yōu)殇N毀狀態(tài)

7.onRestart() :這個(gè)方法在活動(dòng)由停止?fàn)顟B(tài)(onStop)重新變?yōu)檫\(yùn)行狀態(tài)時(shí)調(diào)用,也就是活動(dòng)被重新啟動(dòng)了

活動(dòng)生命周期圖


實(shí)例來解釋各個(gè)方法的用途

首先創(chuàng)建一個(gè)ActivityLifeCycle項(xiàng)目,主活動(dòng)和布局分別為MianActivity和activity_main.xml


MainActivity


MainActivity

再創(chuàng)建兩個(gè)子活動(dòng),分別為NormalAvtivity和DialogActivity(對話框形式),在main_activity里定義兩個(gè)按鈕用于對另外兩個(gè)活動(dòng)的跳轉(zhuǎn)

activity_normal布局文件


activity_dialog布局文件


配置對話框主題

配置對話框時(shí)報(bào)錯(cuò),把DialogActivity的父類繼承改為Activity而不是AppCompatActivity

再剛創(chuàng)建主活動(dòng)且執(zhí)行的時(shí)候

onCreate(),onStart(),onResume()三個(gè)方法均會(huì)執(zhí)行,當(dāng)點(diǎn)擊第一個(gè)按鈕到NormalActiivty時(shí),由于NormalActiivty會(huì)把MainActivity完全遮擋住,因此onPause() , onStop()方法都會(huì)執(zhí)行,然后按下Back鍵返回主活動(dòng),onRestart(),onStart,onResume() 三個(gè)方法會(huì)重新執(zhí)行,而onCreate()方法不會(huì)再執(zhí)行了,因?yàn)榛顒?dòng)并沒有再次創(chuàng)建

再點(diǎn)擊第二個(gè)按鈕,啟動(dòng)DialogActivity(對話框活動(dòng)),回執(zhí)行onPause()方法,onStop()方法并沒有執(zhí)行,因?yàn)镈ialogActivity活動(dòng)沒有完全遮住主活動(dòng),再按Back鍵返回主活動(dòng)也只有Resume()方法執(zhí)行,再按Back鍵退出主活動(dòng),會(huì)依次執(zhí)行onPause(),onStop(),onDestroy()方法,最終銷毀MainActivity

其實(shí)可以理解為onPause()暫停 和 onResume() 繼續(xù) 是一對 ,onStop()停止 和onRestart() 重新開始是一對,在有別的活動(dòng)啟動(dòng)之后和按Back返回之后都會(huì)執(zhí)行對應(yīng)的方法

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容