启动模式分为4种,分别为
- Standrad
- SingleTop
- SingleTask
- SingleIntance
Standrad
就是默认的模式,启动多少个就是多少个
SingleTop
SingleTop 需要这样理解,SingleOnTop,当栈顶是我的时候,就不再创建新的实例。
例如,ABCD,启动D,还是ABCD。如果是ABDC,启动D,最后就变成ABDCD。
SingleTask
SingleOnTask的意思,我在这个任务栈是唯一的。需要注意的是,这货启动是默认自带clearTop效果的,也就是会把在它之后的Activity都清楚掉。
例如,任务栈中有ABDC,启动D,将会变成ABD,C将会被自动推出。
SingleIntance
这个可以看做是SingleTask加强版,使用这个属性的Activity,将会被单独放在一个任务栈中,然后这个Activity在进程中都是唯一个的
一个栗子
A 属于栈1,BC 属于栈2,A 为standard
模式,BC都是为singleTask
模式。启动方式为这样 A->B->C->A->B。这样启动的时候,用户按下返回键就是桌面了。问题主要是在最后启动的B上,singleTask 自带clearTop 属性,将会把CA清除出去,A 和 B 又不是在相同的任务栈上,所以就回到桌面了。
启动Activity的一些常用的FLAG
FLAG_ACTIVITY_NEW_TASK
其实就是SingleTask
模式
FLAG_ACTIVITY_SINGLE_TOP
就是singletop
FLAG_ACTIVITY_CLEAR_TOP
清除在他最子上的活动,配合NEW_TASK
使用
FLAG_ACTIVITY_EXECULE_FROM_RECENTS
不出现在最近应用列表中
小坑
singleTop
的Activity,用startActivityForResult
启动的时候是立刻返回值的,但是是错误的result
网友评论