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