activity四種啟動(dòng)模式
一、standard:
默認(rèn)啟動(dòng)模式淮蜈,每次啟動(dòng)都會(huì)創(chuàng)建一個(gè)新的activity實(shí)例對(duì)象
FirstActivity SecondActivity 均為 standard
生命周期:初始創(chuàng)建
FirstActivity:onCreate斋攀、onStart、onResume
1.1創(chuàng)建成功 跳轉(zhuǎn)下一界面
FirstActivity: onPause
SecondActivity: onCreate
SecondActivity: onStart
SecondActivity: onResume
FirstActivity: onStop
1.2梧田、返回當(dāng)前界面 SecondActivity 調(diào)用finish方法 同返回鍵
SecondActivity: onPause
FirstActivity: onRestart
FirstActivity: onStart
FirstActivity: onResume
SecondActivity: onStop
SecondActivity: onDestroy
1.3淳蔼、返回當(dāng)前界面 SecondActivity 調(diào)用startActivity方法
SecondActivity: onPause
FirstActivity: onCreate
FirstActivity: onStart
FirstActivity: onResume
SecondActivity: onStop
1.4、自己啟動(dòng)自己 調(diào)用startActivity方法 生命周期與2 一致
1與2 差異在于activity是否重建 對(duì)標(biāo)standard 啟動(dòng)即新建
2裁眯、singleTop:
如果activity實(shí)例位于當(dāng)前任務(wù)棧頂鹉梨,就重用棧頂實(shí)例并回調(diào)該實(shí)例的onNewIntent方法,否則走新建流程
FirstActivity 為 singleTop SecondActivity 為 standard
生命周期:初始創(chuàng)建
FirstActivity:onCreate穿稳、onStart存皂、onResume
2.1 創(chuàng)建成功 跳轉(zhuǎn)下一界面
見1.1
2.2、返回當(dāng)前界面 SecondActivity 調(diào)用finish方法 同返回鍵
見1.2
2.3逢艘、返回當(dāng)前界面 SecondActivity 調(diào)用startActivity方法
SecondActivity: onPause
FirstActivity: onCreate
FirstActivity: onStart
FirstActivity: onResume
SecondActivity: onStop
2.4旦袋、自己啟動(dòng)自己 調(diào)用startActivity方法
FirstActivity: onPause
FirstActivity: onNewIntent
FirstActivity: onResume
重點(diǎn)在于 當(dāng)前即將新建Activity對(duì)象是否已是棧頂元素 是則重用 否則新建
3、singleTask:
如果要啟動(dòng)的Activity在棧中存在實(shí)例埋虹,則不會(huì)重新創(chuàng)建Activity猜憎,而是直接使用棧里的Activity實(shí)例,并回調(diào)onNewIntent方法搔课。并且會(huì)把這個(gè)實(shí)例放到棧頂胰柑,之前在這個(gè)Activity之上的都會(huì)被出棧銷毀。
FirstActivity 為 singleTask SecondActivity 為 standard
生命周期:初始創(chuàng)建
FirstActivity:onCreate爬泥、onStart柬讨、onResume
3.1創(chuàng)建成功 跳轉(zhuǎn)下一界面
見1.1
3.2、返回當(dāng)前界面 SecondActivity 調(diào)用finish方法 同返回鍵
見1.2
3.3袍啡、返回當(dāng)前界面 SecondActivity 調(diào)用startActivity方法
SecondActivity: onPause
FirstActivity: onNewIntent
FirstActivity: onRestart
FirstActivity: onStart
FirstActivity: onResume
SecondActivity: onStop
SecondActivity: onDestroy
重點(diǎn)在最后兩個(gè)方法 SecondActivity 在跳轉(zhuǎn)FirstActivity后銷毀了
3.4踩官、自己啟動(dòng)自己 調(diào)用startActivity方法
FirstActivity: onPause
FirstActivity: onNewIntent
FirstActivity: onResume
總結(jié):若singleTask activity位于棧頂時(shí) 重新satrtActivity 不會(huì)創(chuàng)建新的對(duì)象而是 調(diào)用onPause onNewIntent onResume 方法
若singleTask activity不在棧頂時(shí)且棧中已存在該對(duì)象 重新satrtActivity 不會(huì)創(chuàng)建新的activity對(duì)象 會(huì)銷毀原對(duì)象到棧頂之間的所有activity對(duì)象并將此對(duì)象置于棧頂。若棧中無該對(duì)象重新satrtActivity會(huì)按默認(rèn)啟動(dòng)方式進(jìn)行
注:taskAffinity 這個(gè)屬性與singleTask 結(jié)合會(huì)影響生命周期(沒研究過)
4境输、singleInstance:
singleInstance activity所在的棧中只會(huì)有這一個(gè)activity