Activity是Android最重要的組件,因?yàn)樗桥c用戶交互的。所以我們要弄明白Activity的生命周期。
Activity的生命周期有兩種情況,第一種是正常情況下的創(chuàng)建,銷毀。第二種是Activity被內(nèi)存回收的情況。
1.正常情況下的生命周期
1.onCreate
表示Activity正在被創(chuàng)建,在這個(gè)方法中我們可以做一些初始化的工作,比如setContentView去加載資源布局、初始化Activity所需的數(shù)據(jù)。
2.OnRestart
表示Activity正在重新啟動(dòng),Activity由不可見重新變?yōu)榭梢姞顟B(tài)。這個(gè)過程一般是用戶導(dǎo)致的。
3.OnStart
表示Activity正在被啟動(dòng),即將開始,這個(gè)時(shí)候Activity已經(jīng)可見,但是還沒有出現(xiàn)到前臺,無法和用戶交互。
4.OnResum
表示Activity已經(jīng)可見,并且出現(xiàn)在前臺并開始活動(dòng),可以與用戶用戶做一些交互。它與OnStart都表示Activity可見。
5.OnPause
表示Activity正在停止,此時(shí)可以做一些操作,但是不能太耗時(shí),因?yàn)樾碌腁ctivity的onStart要等OnPause執(zhí)行完才能執(zhí)行。
6.OnStop
表示Activity即將停止,可以做一些重量級的回收操作,同樣不能太耗時(shí)。
7.OnDestory
表示Acitivity即將被銷毀,這個(gè)是Activity的最后一個(gè)毀掉,在這里我們可以做一些回收工作和最終的資源的釋放。
問題1:onStart 和onResum ,OnPause和OnStop從描述上來看差不多,對我們來說有什么實(shí)質(zhì)上的不同呢?
在我的理解中實(shí)質(zhì)上的不同就是 能否與用戶進(jìn)行交互。onResum,OnPause都是在前臺,而其他兩個(gè)可見但是不在前臺。
2.異常情況下的生命周期。
有幾種情況
1.資源相關(guān)的系統(tǒng)廢紙發(fā)生改變導(dǎo)致Activity被殺死并重建。
最典型的情況就是橫豎屏,當(dāng)橫豎屏切換的時(shí)候,Activity會(huì)被銷毀并重新創(chuàng)建。
在這種情況下Android會(huì)先調(diào)用它的onSaveInstanceState方法,保存當(dāng)前狀態(tài)。并且會(huì)把onSaveInstanceState保存的Bundle對象作為參數(shù)傳給onRestoreInstanceState和onCreate方法。
我們可以從這兩個(gè)方法中取出之前保存的數(shù)據(jù)并回復(fù)。
問題2:onRestoreInstanceState和onCreate方法既然都可以取出之前保存的數(shù)據(jù),那么為什么還會(huì)有兩個(gè)方法。
首先調(diào)用時(shí)機(jī)不同,onRestoreInstanceState是在onStart之后調(diào)用。
第二onRestoreInstanceState方法一旦被調(diào)用,那么Bundle一定是有值得。而OnCreate方法每次還需要判斷是否為空。
2.資源內(nèi)存不足導(dǎo)致低優(yōu)先級的Activity被殺死
這種情況下的資源存儲(chǔ)和恢復(fù)過程和第一種情況是相同的。主要講述下Activity的優(yōu)先級情況。由高到低分為以下三種。
1.前臺Activity——正在和用戶交互。優(yōu)先級最高。
2.可見但非前臺Activity——比如彈出一個(gè)對話框,導(dǎo)致Activity可見但是位于后臺無法和用戶直接交互。
3.后臺Activity——已經(jīng)被暫停的Activity,優(yōu)先級最低。