activity我們都很熟悉了杠愧,可是其中的很多細節(jié)我覺得還是有必要來理清楚的。
activity生命周期可以分為兩部分:
1·正常情況下的生命周期
? ? 正常情況下的生命周期指的是在有用戶參與的情況下屁使,activity所經(jīng)過的生命周期的改變。
2·異常情況下的生命周期
異常情況下的生命周期指的是activity被系統(tǒng)回收或者由于當前設備的configuration發(fā)生改變從而導致activity被銷毀重建奔则。
如上所述蛮寂,在正常情況下activity會經(jīng)歷如下生命周期:
onCreate:
生命周期的第一個方法,activity正在被創(chuàng)建易茬,在這里可以做一些初始化的工作酬蹋,比如調(diào)用setContentView,初始化數(shù)據(jù)抽莱,初始化控件等等范抓。
onStart:
activity正在被啟動,這個時候activity已經(jīng)可見了食铐,但是還無法和用戶交互匕垫。這時可以理解為它已經(jīng)顯示出來但我們還看不到。
onRestart:
表示activity正在重新啟動璃岳。一般情況下年缎,當當前activity從不可見重新變?yōu)榭梢姞顟B(tài)時悔捶,onRestart就會被調(diào)用。比如用戶按home鍵返回到桌面单芜,這時的activity會執(zhí)行onPause和onStop蜕该,當用戶再重新回到這個activity時,onRestart就會被執(zhí)行
onResume:
這時activity可見了并出現(xiàn)在前臺活動洲鸠,可以和用戶交互堂淡。
onRestart和onResume都表示可見,但onRestart時activity在后臺扒腕,onResume時activity在前臺绢淀。
onPause:
這時activity正在停止,緊接著會執(zhí)行onStop瘾腰,此時可以做一些存儲數(shù)據(jù)/停止動畫等工作皆的,但是不能做太耗時的操作。
因為只有當當前的activity的onPause執(zhí)行完新的activity的onResume才會執(zhí)行蹋盆,activity才會顯示在前臺费薄。
onStop:
activity將停止,同樣不能做耗時操作栖雾,可以做一些回收工作楞抡。
onDestroy:
activity最終被銷毀,在這里可以做一些回收工作和最終的資源釋放析藕。
應當注意的地方:
* 正常情況下當前activity切換到一個新的activity的時候召廷,回調(diào)是onPause->onStop但是如果新 ?的activity采用了透明主題案铺,那么當前activity不會回調(diào)onStop欢揖。
* Android官方文檔對onPause的解釋中有一句:不能在onPause中做重量級的操作晋渺,因為必須 ? ? ?onPause執(zhí)行完成以后新的activity才能resume倘屹。所以要避免在onPause中做耗時操作,好讓新 ? ?activity盡快顯示出來并切換到前臺和用戶交互算墨。
異常情況下的生命周期:
除了以上說的正常情況下的生命周期蹲嚣,還有一些異常情況,比如當系統(tǒng)內(nèi)存不足時车摄,當系統(tǒng)配置發(fā)生改變時,activity都有可能被殺死仑鸥。
情況1:當系統(tǒng)配置發(fā)生改變時
比如當前activity處于豎屏狀態(tài)吮播,如果突然旋轉(zhuǎn)屏幕,由于系統(tǒng)配置發(fā)生了改變眼俊,在默認情況下activity就會被銷毀病重新創(chuàng)建(也可以組織系統(tǒng)重新創(chuàng)建activity)意狠。
當這種場景發(fā)生時,在默認情況下activity的生命周期如下:
情況2:資源內(nèi)存不足導致低優(yōu)先級的activity被殺死
activity按照優(yōu)先級從高到低分為三種:
(1)前臺activity---正在和用戶交互的activity(onResume狀態(tài))疮胖,級別最高
(2)可見但非前臺activity---比如activity彈出了一個對話框?qū)е耡ctivity可見但無法和用戶直接 ? ? ? ? 交互(onPause狀態(tài))
(3)后臺activity---已經(jīng)執(zhí)行了onStop的activity
當系統(tǒng)內(nèi)存不足時环戈,系統(tǒng)會按照上述優(yōu)先級去kill掉目標activity所在的進程闷板,這時會通過調(diào)用onSaveInstanceState和onRestoreInstanceState分別來存儲、恢復數(shù)據(jù)院塞。如果一個進程中沒有四大組件在執(zhí)行遮晚,那么這個進程將很快被系統(tǒng)殺死。
當系統(tǒng)配置發(fā)生改變后拦止,阻止activity重建
系統(tǒng)配置中有很多內(nèi)容县遣,當某項內(nèi)容發(fā)生改變后,如果不想系統(tǒng)重新創(chuàng)建activity汹族,可以給activity指定configChanges屬性萧求。比如不想讓activity在屏幕旋轉(zhuǎn)的時候重新創(chuàng)建就可以給activity指定configChanges屬性:
android:configChanges="orientation"
---------------------------------------------------------------------end
參考了 《Android開發(fā)藝術(shù)探索》---任玉剛著 ?O(∩_∩)O~ ? 其實我這也只是做個筆記,下次說activity的啟動模式