打開一個(gè)新的activity時(shí):
onCreate => onStart => onResume
關(guān)閉一個(gè)已有的activity時(shí):
onPause => onStop => onDestroy
返回上一個(gè)activity時(shí):
onRestart => onStart => onResume
當(dāng)activity的啟動(dòng)模式為standard(系統(tǒng)默認(rèn))時(shí),生命周期的方法是按照這樣的順序執(zhí)行失驶。但是當(dāng)啟動(dòng)模式不同時(shí)吃衅,生命周期方法的執(zhí)行順序就有所不同河泳。
首先阴挣,先來看一下activity的四種啟動(dòng)模式躯概。
1登钥、standard 標(biāo)準(zhǔn)模式
每次打開一個(gè)activity都會(huì)創(chuàng)建一個(gè)新的實(shí)例。
2娶靡、singleTop 棧頂復(fù)用模式
打開activity時(shí)牧牢,如果這個(gè)activity已經(jīng)在任務(wù)棧的棧頂了,就不會(huì)創(chuàng)建新的activity實(shí)例,而是復(fù)用已經(jīng)有的activity塔鳍;如果不在棧頂則重新創(chuàng)建新的實(shí)例伯铣。
3、singleTask 棧內(nèi)復(fù)用模式
打開activity時(shí)轮纫,如果在當(dāng)前任務(wù)棧內(nèi)已經(jīng)存在腔寡,則會(huì)殺死它上面的所有任務(wù),將這個(gè)activity置頂掌唾。
4放前、singleInstance 單實(shí)例模式
這算是一種加強(qiáng)版singleTask模式,打開activity時(shí)糯彬,會(huì)開一個(gè)新的任務(wù)棧犀斋,并且只會(huì)存在一個(gè)實(shí)例。
那么問題就復(fù)雜了情连,遇到不同的啟動(dòng)模式叽粹,每個(gè)activity的生命周期就會(huì)出現(xiàn)很多變化。不過有一點(diǎn)我們要牢記却舀,生命周期是存在對(duì)應(yīng)關(guān)系的:
onCreate 與 onDestroy 對(duì)應(yīng)
onStart 與 onStop 對(duì)應(yīng)
onResume 與 onPause 對(duì)應(yīng)
一個(gè)activity如果執(zhí)行了onPause方法虫几,再次打開它一定會(huì)執(zhí)行onResume方法;如果執(zhí)行了onStop方法挽拔,再次打開它一定會(huì)執(zhí)行onStart方法辆脸;如果被銷毀(onDestroy),再次打開一定需要重新創(chuàng)建(onCreate)螃诅。
如果打開一個(gè)activity啡氢,并且這個(gè)activity是被復(fù)用的,打開時(shí)會(huì)執(zhí)行一個(gè)新的方法onNewIntent(Intent intent)术裸,這是需要注意的倘是。
接下來說一下結(jié)合啟動(dòng)模式,生命周期執(zhí)行的過程袭艺。
1搀崭、先從最簡(jiǎn)單的開始。
activityA的啟動(dòng)模式是standard猾编,activityB的也是standard瘤睹。在A里打開B:
A:onPause -> B:onCreate -> B:onStart -> B:onResume -> A:onStop
這時(shí)候我們點(diǎn)擊返回鍵:
B:onPause -> A:onRestart -> A:onStart -> A:onResume -> B:onStop -> B:onDestroy
2、上面的是基礎(chǔ)答倡,接下來是難一點(diǎn)的轰传。
activityA的啟動(dòng)模式是singleTask,activityB的是standard瘪撇。先在A里打開B获茬,之后再用B打開A時(shí):
B:onPause -> A:onNewIntent -> A:onRestart -> A:onStart -> A:onResume -> B:onStop -> B:onDestroy
3港庄、這個(gè)和上面的差不多,都是看一下activity被復(fù)用時(shí)锦茁,走的生命周期有哪些攘轩。
activityA的啟動(dòng)模式是singleTop叉存。在A里再次打開A:
A:onPause -> A:onNewIntent -> A:onResume
4码俩、還有就是開了新的任務(wù)棧時(shí),activity被復(fù)用時(shí)歼捏,生命周期的執(zhí)行順序稿存。
activityA的啟動(dòng)模式是singleTop,activityB的是singleInstance瞳秽。先在A里打開B瓣履,之后再用B打開A時(shí):
B:onPause -> A:onNewIntent -> A:onRestart -> A:onStart -> A:onResume -> B:onStop
5、現(xiàn)在再添加一點(diǎn)東西练俐,如果將打開的activity設(shè)置為透明主題袖迎,再來看一下。
activityA的啟動(dòng)模式是singleTop腺晾,activityB的是standard燕锥,activityB的主題是透明的。
先在A里打開B:
A:onPause -> B:onCreate -> B:onStart -> B:onResume
接下來悯蝉,再在B里打開A:
B:onPause -> A:onStop -> A:onCreate -> A:onStart -> A:onResume -> B:onStop
可以發(fā)現(xiàn)归形,在B打開A時(shí),先執(zhí)行上一個(gè)A的onStop方法鼻由,之后再重新創(chuàng)建一個(gè)新的A暇榴。
6、如果是activityA的啟動(dòng)模式是singleTask就簡(jiǎn)單了蕉世。
activityA的啟動(dòng)模式是singleTask蔼紧,activityB的啟動(dòng)模式是standard,activityB設(shè)置了透明主題狠轻。
先在A里打開B歉井,之后在B里打開A時(shí):
B:onPause -> A:onNewIntent -> A:onResume -> B:onStop -> B:onDestroy
結(jié)合啟動(dòng)模式,生命周期方法執(zhí)行的順序還有其他的情況哈误,大家可以慢慢嘗試哩至。
其實(shí)在實(shí)際應(yīng)用中,這些情況遇到的并不多蜜自,研究這些內(nèi)容的意義更多的是在于加深對(duì)activity生命周期和啟動(dòng)模式的理解菩貌,鍛煉邏輯思維。