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

一.返回棧

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

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


二.活動狀態(tài)

每個活動在其生命周期中最多可能會有四種狀態(tài)

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

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

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

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

二,活動的生存期

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

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

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

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

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

5.onStop() :活動完全不可見時調(diào)用

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

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

活動生命周期圖


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

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


MainActivity


MainActivity

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

activity_normal布局文件


activity_dialog布局文件


配置對話框主題

配置對話框時報錯,把DialogActivity的父類繼承改為Activity而不是AppCompatActivity

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

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

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

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

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

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

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