Android作為一定互聯(lián)網(wǎng)領(lǐng)域的一大熱門(mén),其活動(dòng)周期也受到人們的關(guān)注。中培偉業(yè)《Android APP開(kāi)發(fā)架構(gòu)應(yīng)用實(shí)戰(zhàn)》培訓(xùn)專家隋老師指出,掌握活動(dòng)的生命周期對(duì)任何Android開(kāi)發(fā)者來(lái)說(shuō)都非常重要,Android中的活動(dòng)是可以層疊的,我們每啟動(dòng)一個(gè)洗的活動(dòng),就會(huì)覆蓋在原活動(dòng)之上,然后點(diǎn)擊Back鍵會(huì)銷毀最上面的活動(dòng),下面的一個(gè)活動(dòng)就會(huì)重新顯示出來(lái)。
隋老師認(rèn)為,其實(shí)Android是使用任務(wù)(Task)來(lái)管理活動(dòng)的,一個(gè)任務(wù)就是一組存放在棧里的活動(dòng)的集合,這個(gè)棧也被稱作返回棧(Back Task),棧是一種后進(jìn)先出的數(shù)據(jù)結(jié)構(gòu),在默認(rèn)情況下,每當(dāng)我們啟動(dòng)了一個(gè)新的活動(dòng),他會(huì)在返回棧中入棧,并處于棧頂位置,而每當(dāng)我們按下Back鍵或者調(diào)用finish()方法去銷毀一個(gè)活動(dòng)時(shí),處于棧頂?shù)幕顒?dòng)就會(huì)出棧,這時(shí)前一個(gè)入棧的活動(dòng)就會(huì)重新處于棧頂?shù)奈恢茫到y(tǒng)總是會(huì)顯示處于棧頂?shù)幕顒?dòng)給用戶通過(guò)示例圖看返回棧是如何管理活動(dòng)入棧出棧操作的:
活動(dòng)狀態(tài)
1. 運(yùn)行狀態(tài)當(dāng)一個(gè)活動(dòng)位于返回棧的棧頂時(shí),這時(shí)活動(dòng)就處于運(yùn)行狀態(tài)。系統(tǒng)最不愿意回收的就是處于運(yùn)行狀態(tài)的活動(dòng),因?yàn)檫@會(huì)帶來(lái)非常差的用戶體驗(yàn)。
2. 暫停狀態(tài)當(dāng)一個(gè)活動(dòng)不再處于棧頂位置,但仍然可見(jiàn)時(shí),這時(shí)活動(dòng)就進(jìn)入了暫停狀態(tài),比如對(duì)話框形式的活動(dòng)只會(huì)占用屏幕中間的部分區(qū)域,你還可以看到后邊的界面,這是,后面的活動(dòng)就處于暫停狀態(tài)
3. 停止?fàn)顟B(tài)當(dāng)一個(gè)活動(dòng)不在處于棧頂位置,并且完全處于不可見(jiàn)的時(shí)候,就進(jìn)入了停止?fàn)顟B(tài),就是進(jìn)入了一個(gè)完全不透明的活動(dòng),上個(gè)活動(dòng)會(huì)處于停止?fàn)顟B(tài),這時(shí)系統(tǒng)仍然會(huì)為這種活動(dòng)保存相應(yīng)的狀態(tài)和成員變量,但是這并不是完全可靠的,當(dāng)其他地方需要內(nèi)存時(shí),處于停止?fàn)顟B(tài)的活動(dòng)有可能會(huì)被系統(tǒng)回收
4. 銷毀狀態(tài)當(dāng)一個(gè)活動(dòng)從返回棧中移除后就變成了銷毀狀態(tài),系統(tǒng)傾向于回收處于這種狀態(tài)的活動(dòng),從而保證手機(jī)內(nèi)存充足活動(dòng)的生存期Activity類中定義了七個(gè)回掉方法,覆蓋了活動(dòng)生命周期的每一個(gè)環(huán)節(jié):
a. onCreate()每個(gè)活動(dòng)中都重寫(xiě)這個(gè)方法,他會(huì)在活動(dòng)第一次被創(chuàng)建的時(shí)候調(diào)用,你應(yīng)該在這個(gè)方法中完成活動(dòng)的初始化操作,比如加載布局、綁定事件。
b. onStart()這個(gè)方法在活動(dòng)由不可見(jiàn)變?yōu)榭梢?jiàn)的時(shí)候調(diào)用
c. onResume()活動(dòng)準(zhǔn)備好和用戶進(jìn)行交互時(shí)調(diào)用,此時(shí)的活動(dòng)一定位于返回棧的棧頂,并且處于運(yùn)行狀態(tài)
d. onPause()在系統(tǒng)準(zhǔn)備去啟動(dòng)或者恢復(fù)另一個(gè)活動(dòng)的時(shí)候調(diào)用
e. onStop()這個(gè)方法在活動(dòng)完全不可見(jiàn)的時(shí)候調(diào)用
f. onDestroy()這個(gè)方法在活動(dòng)被銷毀之前調(diào)用,之后活動(dòng)的狀態(tài)將變?yōu)殇N毀狀態(tài)
g. onRestart()這個(gè)方法咋活動(dòng)由停止?fàn)顟B(tài)變?yōu)檫\(yùn)行狀態(tài)之前調(diào)用,也就是活動(dòng)被重新啟動(dòng)了
以上七種方法除了onRestart()方法,其他都是兩兩相對(duì)的,從而又可以將活動(dòng)分為三種生存期:
(一)完整生存期活動(dòng) 在onCreate()方法和onDestroy()方法之間所經(jīng)歷的,就是完整生存期
(二)可見(jiàn)生存期活動(dòng) 在onStart()方法和onStop()之間所經(jīng)歷的,在可見(jiàn)生命期內(nèi),活動(dòng)對(duì)于用戶總是可見(jiàn)的,即便有可能無(wú)法和用戶進(jìn)行交互。
(三)前臺(tái)生存期活動(dòng) 在onResume()方法和onPause()方法之間所經(jīng)歷的,這個(gè)生存期內(nèi),活動(dòng)總是處于運(yùn)行狀態(tài),此時(shí)的活動(dòng)是可以和用戶進(jìn)行相互的,我們平時(shí)看到和接觸最多的也是這個(gè)狀態(tài)下的活動(dòng)。