Android Activity启动模式

standard
singleTop
singleTask
singleInstance
复杂情况记录

Activity的默认启动模式,直接把当前Activity的实例添加到启动它的实例所在的栈中

这种启动模式不会理会栈的情况,即使已经存在了该Activity实例,依然会再次添加

栗子:栈001:ABCD > D => 栈001:ABCDD

Note:事故多发地在启动该Activity的对象,Intent的实例化接收的参数类型为Context,但是非Activity类型的Context并没有所谓的任务栈,比如获取的全局ApplicationContext,需要把Activity放入新建的栈中

启动Activity到栈顶已经存在该实例的栈时,栈不会入栈新Activity

栈会复用位于栈顶的实例,复用过程不会调用onCreate、onStart创建新实例,取而代之会调用onNewIntent...

栗子:

  • 栈002:ABCD > D => 栈002:ABCD
  • 栈003:ADCB > D => 栈003:ADCBD

Note:singleTop只会判断栈顶的情况,不会考虑栈中的实例,如果栈中已经存在该实例但是没有位于栈顶,该实例还是会被创建

一种栈内单例模式,默认具有clearTop的效果

创建实例时,查找目标栈,不设置则使用默认栈

  • 没有目标栈,则创建栈后加入实例
  • 找到栈,则判断栈中是否已存在该实例
    1 无,则入栈
    2 有,则clearTop,把栈内实例出栈,直到该实例位于栈顶,同样会调用onNewIntent而不创建新实例

栗子:

  • D > 栈004(null or ABC)=> 栈004:D or ABCD
  • D > 栈005:ADBC => 栈005:AD

Note:

栈内单例模式,创建实例时会创建新的栈入栈,该实例会独占该栈

再次创建实例时不会创建新实例,会跳转到该栈显示实例,由该Activity启动的Activity会在别的栈中(具体哪个我也不知道规则)

栗子:
栈006:ABC > D => 栈006:ABC;栈007:D

Note:创建实例时会创建栈

复杂情况记录

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