Acitivity启动模式

来源:互联网 发布:淘宝联盟已结算但没钱 编辑:程序博客网 时间:2024/05/18 23:55

配置方式:在manifest里面相应的activity标签里面加上android:launchMode="<launchmode>".

1standard模式

 1)当Activity 未启动时,startActivity增加FLAG_ACTIVITY_SINGLE_TOP标记,周期变换为onCreat----onStart---onResume,不包括onNewIntent

 2)当Activity在栈顶时,startActivity增加FLAG_ACTIVITY_SINGLE_TOP标记,周期变换为  onPause----onNewIntent----onResume.

 3)当Activity在栈顶时,startActivity未增加FLAG_ACTIVITY_SINGLE_TOP标记,周期变换为  onPause----onCreate(new)----onStart(new)---onResume(new)---onStop.

2.singleTop模式

 1)当Activity未启动时,startActivity是否增加FLAG_ACTIVITY_SINGLE_TOP标记,周期变换都为onCreat---onStart---onResume,不包括onNewIntent

 2)当Activity在栈顶时,startActivity是否增加FLAG_ACTIVITY_SINGLE_TOP标记,周期变换为  onPause----onNewIntent----onResume.

 3)当Activity在栈顶,跳转到其他Activity再用startActivity切换回来时将生成新的Activity实例。

3.singleTask模式

 1)当Activity未启动时,startActivity,周期变换都为onCreat---onStart---onResume,不包括onNewIntent

 2)当Activity在栈顶时,startActivity,周期变换为  onPause----onNewIntent----onResume.

 3)当Activity在栈顶,跳转到其他Activity再用startActivity切换回来时 生命周期为  onPause--onStop---onNewIntent---onStart---onResume。

4.singleInstance模式

 1)当Activity未启动时,startActivity,周期变换都为onCreat---onStart---onResume,不包括onNewIntent,新创建task

 2)当Activity在栈顶时,startActivity,周期变换为  onPause----onNewIntent----onResume.

 3)当Activity在栈顶,跳转到其他Activity再用startActivity切换回来时 生命周期为  onPause--onStop---onNewIntent---onStart---onResume,还是同一个task

总结:

 singleTop模式允许在跳转到该类型对象时,如果在栈顶,不用重新创建,回调onNewIntent,不在栈顶的话会重新创建

 standard模式允许在一个栈里多次创建,但是在栈顶,并且被relaunch时附带了FLAG_ACTIVITY_SINGLE_TOP标记,则不会创建新对象,会回调onNewIntent.

上面两种在一个任务栈里可以创建多次,用startActivity启动时,如果intent携带了FLAG_ACTIVITY_NEW_TASK标记,但是activity的taskAffinity属性跟启动它的任务栈的

taskAffinity属性一致的话,不会创建到新的任务栈里面。


singleInstance模式独占一个task,已有的话不会重复创建,适用于多个task共享一个Activity,比如地图

singleTask模式允许activity在一个任务栈里顶多出现一个类型的对象,当跳转时,如果任务栈里已有则会将该activity上面的都清除掉