美文网首页
Activity-启动模式

Activity-启动模式

作者: 有腹肌的豌豆Z | 来源:发表于2020-09-21 19:44 被阅读0次

一、Activity启动模式:

1.默认启动模式standard:

  • 每次启动一个Activity都会重新创建一个新的实例,不管这个实例是否已经存在,此模式的Activity默认会进入启动它的Activity所属的任务栈中;

2.栈顶复用模式singleTop:

  • 须要创建的 Activity 已经处于栈顶时,此时会直接复用栈顶的 Activity 。不会再创建新的 Activity。
  • 若须要创建的 Activity 不处于栈顶,此时会又一次创建一个新的 Activity 入栈,同 Standard 模式一样。
  • 如果目标Activity不存在在栈顶,生命周期正常执行,目标在栈顶执行onNewIntent()函数。

🌰 Activity 栈中以此有 A 、B 、C 三个 Activity ,此时 C 处于栈顶,启动模式为 SingleTop 模式。情况一:在 C Activity 中加入点击事件,须要跳转到还有一个同类型的 C Activity 。结果是直接复用栈顶的 C Activity。情况二:在 C Activity 中加入点击事件,须要跳转到还有一个 A Activity。结果是创建一个新的 Activity 入栈。成为栈顶。

3.栈内复用模式singleTask:

  • 若须要创建的 Activity 已经处于栈中时,此时不会创建新的 Activity ,而是将存在栈中的 Activity 上面的其他 Activity 所有销毁,使它成为栈顶。并回调onNewIntent方法。
  • 如果是在别的应用程序中启动它,则会新建一个 task ,并在该task中启动这个 Activity ,singleTask 允许别的 Activity 与其在一个 task 中共存,也就是说,如果我在这个 singleTask 的实例中再打开新的 Activity ,这个新的 Activity 还是会在 singleTask 的实例的 task 中。

4.全局唯一模式singleInstance:

  • ingleInstance 比较特殊,是全局单例模式,是一种加强的 SingleTask 模式。
  • 它除了具有它所有特性外,还加强了一点:只有一个实例,并且这个实例独立运行在一个 task 中,这个 task 只有这个实例,不允许有别的 Activity 存在。

二、动态设置启动模式

几种常见的Flag

  • FLAG_ACTIVITY_NEW_TASK
    对应singleTask启动模式,其效果和在XML中指定该启动模式相同;
  • FLAG_ACTIVITY_SINGLE_TOP
    对应singleTop启动模式,其效果和在XML中指定该启动模式相同;
  • FLAG_ACTIVITY_CLEAR_TOP
    具有此标记位的Activity,当它启动时,在同一个任务栈中所有位于它上面的Activity都要出栈。这个标记位一般会和singleTask模式一起出现,在这种情况下,被启动Activity的实例如果已经存在,那么系统就会回调onNewIntent。如果被启动的Activity采用standard模式启动,那么它以及连同它之上的Activity都要出栈,系统会创建新的Activity实例并放入栈中;
  • FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
    具有这个标记的 Activity 不会出现在历史 Activity 列表中;

相关文章

网友评论

      本文标题:Activity-启动模式

      本文链接:https://www.haomeiwen.com/subject/uhfxsktx.html