? ??????????????????????????????????????????????生命周期
android是使用任務(wù)(Task)來管理活動的瘫想,一個任務(wù)就是一組存放在棧里的活動集合戚揭,這個棧也被稱為返回棧(Back Task)涩蜘。棧的數(shù)據(jù)結(jié)構(gòu)是后進(jìn)先出的數(shù)據(jù)結(jié)構(gòu)决乎。也就是我們啟動了一個新的活動它會返回棧頂中违柏,當(dāng)我們按下back肩或者調(diào)用finish()方法銷毀一個活動時一喘,該活動會出棧绒瘦,而這個活動前一個入棧的會處于棧頂闭树,顯示給用戶蚪腋。每個活動的生命周期最多會有4中不同的狀態(tài)擎厢。
1.運(yùn)行狀態(tài)
當(dāng)一個活動位于返回棧的棧頂時究流,活動就處于運(yùn)行狀態(tài)。
2.暫停狀態(tài)
當(dāng)一個活動不再處于棧頂時动遭,但仍可見芬探,這時活動就進(jìn)入了暫停狀態(tài)。處于暫停狀態(tài)的活動仍然是完全存活的厘惦,系統(tǒng)也不愿去回收這種活動偷仿,除了內(nèi)存極低的情況下,才會去考慮回收這種活動宵蕉。
3.停止?fàn)顟B(tài)
當(dāng)一個活動不再處于棧頂位置酝静,并完全不可見的時候,就進(jìn)入了停止?fàn)顟B(tài)羡玛。系統(tǒng)仍會保存活動相應(yīng)的狀態(tài)和成員變量别智,單著并不是完全可靠的,其他地方需要內(nèi)存時稼稿,處于停止?fàn)顟B(tài)的活動就有可能會被系統(tǒng)回收薄榛。
4.銷毀狀態(tài)
當(dāng)一個活動從返回棧中移除后就變成銷毀狀態(tài)。系統(tǒng)會傾向于回收處于這種狀態(tài)的活動让歼,從而保證手機(jī)的內(nèi)存充足敞恋。 ??
????????????????????????????????????生存期
onRestart()。這個方法在活動由停止?fàn)顟B(tài)變?yōu)檫\(yùn)動狀態(tài)之前調(diào)用谋右,也就是活動被重新啟動硬猫。
完整生存期:
onCreate()。這個方法會在活動第一次被創(chuàng)建時調(diào)用改执。我們應(yīng)該在這個方法中完成活動的初始化操作啸蜜,例如加載布局、綁定事件辈挂。
onDestroy()盔性。這個方法在活動被銷毀前調(diào)用,之后活動的狀態(tài)變?yōu)殇N毀狀態(tài)呢岗。
可見生存期:
onStrat()。這個方法在活動由不可見變?yōu)榭梢姇r調(diào)用蛹尝。
onStop()后豫。這個方法在活動完全不可見時被調(diào)用。該方法和onPause()的主要區(qū)別是突那,如果啟動新活動是對話框式的活動挫酿,那么onStop()方法不會被執(zhí)行,而onSause()方法會被執(zhí)行愕难。
前臺生存期:
onResume()早龟。這個方法在活動準(zhǔn)備好和用戶進(jìn)行交互時調(diào)用惫霸。此活動一定位于返回棧的棧頂,并且處于運(yùn)行狀態(tài)葱弟。
onPause()壹店。這個方法在系統(tǒng)準(zhǔn)備去啟動或者恢復(fù)另一個活動時被調(diào)用。我們通常會在這個方法中將一些消耗CPU的資源釋放掉芝加,以及保存一些關(guān)鍵數(shù)據(jù)硅卢,但這個方法的執(zhí)行速度一定要快,不然會影響新的棧頂活動的使用藏杖。
Android官方提供了一張活動生命周期的示意圖将塑。
活動的啟動模式:
standard是活動默認(rèn)的啟動模式,在不進(jìn)行顯式指定的情況下蝌麸,所以活動都會自動使用這種啟動模式点寥。對于使用stanard模式的活動,系統(tǒng)不會在乎這個活動是否已經(jīng)存在于返回棧中来吩,每次啟動都會創(chuàng)建該活動的一個新實(shí)例敢辩。
當(dāng)活動的啟動模式指定為singleTop,在啟動活動時如果發(fā)現(xiàn)返回棧的棧頂已經(jīng)是該活動误褪,則不會再創(chuàng)建新的活動實(shí)例责鳍。
當(dāng)活動的啟動模式指定為singleTask,每次啟動該活動時系統(tǒng)首先會在返回棧中檢查是否存在該活動的實(shí)例兽间,如果發(fā)現(xiàn)已經(jīng)存在則直接使用該實(shí)例历葛,并把在這個活動之上的所以活動統(tǒng)統(tǒng)出棧,如果沒有發(fā)現(xiàn)就會創(chuàng)建一個新的活動實(shí)例嘀略。
而singleInstance是最特殊最復(fù)雜的一種啟動模式了恤溶。需要我們慢慢積累。