Activity启动模式定义Activity实例与当前栈之间的联系
设置Activity的启动模式有两种方式:
- 清单文件配置
- Intent设置flag
Activity总共有五种启动模式:
standard(默认启动方式)->flag没有设置值 可以有多个实例,不同实例可以存在多个栈里,不同的栈可以有多个实例
singleTop->
FLAG_ACTIVITY_SINGLE_TOP
与standard模式类似,但如果在启动的栈顶已经有该Activity的实例,则不创建新的实例,而是调用已有实例的onNewIntent()
方法singleTask->
FLAG_ACTIVITY_NEW_TASK
是某个栈里唯一的实例,该栈可以存在其他Activity实例,他的所在栈是,启动它的Activity所在栈,如果在该栈再次被启动,则会清空在他之上的Activity,并调用他的onNewIntent()
方法 ;如果在其他栈启动,则除了清空他之上的Activity,还会把他之下的Activity带走一起叠在其他栈的上面,注意两个不合并,可以看出他跟栈是绑定的singleInstance->flag无对应 与singleTask很像,但是它所在的栈容不下任何其他Activity实例,也就是说,任何Activity要打开它要么,已经有一个栈里面唯一只有它,那么回调它的
onNewintent()
方法,如果没有,新建一个栈,它如果要打开其他Activity,则必须在其他栈!xml无对应->
FLAG_ACTIVITY_CLEAR_TOP
singleTask模式会调用该模式,他的功能是清空当前栈中该实例之上的其他Activity
关联关系(affinity)
表明一个Activity要跟那个Task关联,通常情况下,同一个应用的所有Activity属于同一个栈(除了singleInstance)