Activity 启动模式

启动模式分为4种,分别为

  1. Standrad
  2. SingleTop
  3. SingleTask
  4. 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