一、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 列表中;
网友评论