Activity的启动模式

启动模式共有四种

Stand

Android 默认的启动模式,每次创建一个新的实例放入栈

Stand

Activity C 的启动模式为Stand,栈内已有A、B、C,在C内再次启动C,则会创建一个新的C实例放入栈顶。

SingleTask

栈内仅存一个实例

SingleTask

Activity A、C 的启动模式为SingleTask,当需要启动的Activity实例存在于栈内,则pop实例之上的其他实例出栈使其成为栈顶,并回调onNewIntent。

若Activity实例不存在于栈内,则创建实例放入栈。

SingleInstance

一个实例占一个栈

Activity D 的启动模式为SingleInstance,已经启动了ActivityA、ActivityB、ActivityC,由C启动D,则新创建的D实例会单独放一个栈。

由Activity D 启动的Activity E则会回到栈1

SingleTop

SingleTop

Activity A、C 的启动模式为SingleTop,当需要启动的Activity实例位于栈顶,则复用该实例并回调onNewIntent。若需要启动的Activity实例不位于栈顶则新建实例放入栈顶。

启动模式的设置

可以在manifest里设置也可以动态代码设置,intent.addFlags用处在此。若两种方式同时使用,则代码设置的优先级高。

manifest无法为Activity直接指定 FLAG_ACTIVITY_CLEAR_TOP 标识,动态代码方式无法为Activity指定 SingleInstance模式。

有个Flag有用但不常用

FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS

android:excludeFromRecents="true"

官方解释:设置后Activity将不会出现在最近任务。

实际操作:

  • 在Activity时按任务键,会看到任务
  • 先按home键再按任务键,看不到任务,重新打开APP会回到原来的Activity位置
  • 一直按返回直到APP退出,按任务键不设置此属性会看到任务,设置后不会看到任务

有了此操作可以做些不为人知的动作

你可能感兴趣的:(Activity的启动模式)