Activity是Android最重要的組件彪见,因為它是與用戶交互的余指。所以我們要弄明白Activity的生命周期跷坝。
Activity的生命周期有兩種情況柴钻,第一種是正常情況下的創(chuàng)建,銷毀靠粪。第二種是Activity被內(nèi)存回收的情況占键。
1.正常情況下的生命周期
1.onCreate
表示Activity正在被創(chuàng)建,在這個方法中我們可以做一些初始化的工作,比如setContentView去加載資源布局耀鸦、初始化Activity所需的數(shù)據(jù)袖订。
2.OnRestart
表示Activity正在重新啟動洛姑,Activity由不可見重新變?yōu)榭梢姞顟B(tài)皮服。這個過程一般是用戶導(dǎo)致的龄广。
3.OnStart
表示Activity正在被啟動,即將開始两入,這個時候Activity已經(jīng)可見裹纳,但是還沒有出現(xiàn)到前臺紧武,無法和用戶交互阻星。
4.OnResum
表示Activity已經(jīng)可見妥箕,并且出現(xiàn)在前臺并開始活動,可以與用戶用戶做一些交互矾踱。它與OnStart都表示Activity可見呛讲。
5.OnPause
表示Activity正在停止贝搁,此時可以做一些操作,但是不能太耗時弦讽,因為新的Activity的onStart要等OnPause執(zhí)行完才能執(zhí)行往产。
6.OnStop
表示Activity即將停止仿村,可以做一些重量級的回收操作兴喂,同樣不能太耗時衣迷。
7.OnDestory
表示Acitivity即將被銷毀壶谒,這個是Activity的最后一個毀掉,在這里我們可以做一些回收工作和最終的資源的釋放泼差。
問題1:onStart 和onResum ,OnPause和OnStop從描述上來看差不多堆缘,對我們來說有什么實質(zhì)上的不同呢吼肥?
在我的理解中實質(zhì)上的不同就是 能否與用戶進(jìn)行交互缀皱。onResum,OnPause都是在前臺动猬,而其他兩個可見但是不在前臺赁咙。
2.異常情況下的生命周期。
有幾種情況
1.資源相關(guān)的系統(tǒng)廢紙發(fā)生改變導(dǎo)致Activity被殺死并重建极舔。
最典型的情況就是橫豎屏拆魏,當(dāng)橫豎屏切換的時候渤刃,Activity會被銷毀并重新創(chuàng)建溪掀。
在這種情況下Android會先調(diào)用它的onSaveInstanceState方法步鉴,保存當(dāng)前狀態(tài)氛琢。并且會把onSaveInstanceState保存的Bundle對象作為參數(shù)傳給onRestoreInstanceState和onCreate方法阳似。
我們可以從這兩個方法中取出之前保存的數(shù)據(jù)并回復(fù)撮奏。
問題2:onRestoreInstanceState和onCreate方法既然都可以取出之前保存的數(shù)據(jù)畜吊,那么為什么還會有兩個方法玲献。
首先調(diào)用時機(jī)不同捌年,onRestoreInstanceState是在onStart之后調(diào)用礼预。
第二onRestoreInstanceState方法一旦被調(diào)用托酸,那么Bundle一定是有值得。而OnCreate方法每次還需要判斷是否為空念秧。
2.資源內(nèi)存不足導(dǎo)致低優(yōu)先級的Activity被殺死
這種情況下的資源存儲和恢復(fù)過程和第一種情況是相同的摊趾。主要講述下Activity的優(yōu)先級情況砾层。由高到低分為以下三種肛炮。
1.前臺Activity——正在和用戶交互侨糟。優(yōu)先級最高秕重。
2.可見但非前臺Activity——比如彈出一個對話框二拐,導(dǎo)致Activity可見但是位于后臺無法和用戶直接交互百新。
3.后臺Activity——已經(jīng)被暫停的Activity吟孙,優(yōu)先級最低杰妓。