Android学习笔记

Android Note - Activity启动模式

2016-04-06  本文已影响48人  肉丝汤

任务栈


任务栈(ActivityTask)由framework层的ActivityServiceManager管理的一个栈,在默认情况下,一个Application只维护一个任务栈,并以包名命名。每次系统需要启动一个Activity,要先将Activity入栈,然后才开始进行Activity的生命周期

启动模式


在manifest中Activity标签下的"android:launchMode"属性中设置,分为四种:

Standard
Activity启动的默认模式,使用该模式启动Activity时,系统并不会考虑之前是否会有相同的Activity进入任务栈;每次入栈都会创建新的Activity实例,不管栈中是否有相同Activity存在

任务栈 添加 Activity A 添加Activity A 添加Activity A
栈顶 Activity A
Activity A Activity A
栈底 Activity A Activity A Activity A

SingleTop
使用此模式时,系统向任务栈中加入Activity前,会先检查任务栈中栈顶是否为该Activity的实例,如果是的则直接使用该Activity,不是则创建新的实例并入栈

栈顶为要添加的Activity实例

任务栈 添加 Activity B 添加Activity A 添加Activity A
栈顶
Activity A Activity A
栈底 Activity B Activity B Activity B

栈顶不是要添加的Activity实例

任务栈 添加 Activity B 添加Activity A 添加Activity B
栈顶 Activity B
Activity A Activity A
栈底 Activity B Activity B Activity B

SingleTask
当栈顶为需要创建的Activity实例时,其表现形式与SingleTop模式相同;当栈顶不是需要创建的Activity时,则会检查任务栈中是否存在该Activity实例,如果存在,就将处于Activity上方的其他Activity都出栈,将该Activity置于栈顶

栈顶为要添加的Activity实例

任务栈 添加 Activity B 添加Activity A 添加Activity A
栈顶
Activity A Activity A
栈底 Activity B Activity B Activity B

栈顶不是要添加的Activity实例

任务栈 添加 Activity B 添加Activity A 添加Activity B
栈顶
Activity A
栈底 Activity B Activity B Activity B

SingleInstance
使用此模式时,系统会为使用该模式的Activity创建一个新的任务栈并将该Activity入栈,并且该任务栈中只能存在该Activity。也就是说如果有多个Activity使用了该模式,那么系统会为每一个使用该模式创建的Activity创建一个任务栈

其中Activity C为使用SingleInstance模式启动的Acitivity

默认任务栈 添加 Activity A 添加Activity C 添加Activity B 点击Back按钮 点击Back按钮 点击Back按钮
栈顶
Activity B
栈底 Activity A Activity A Activity A Activity A
SingleInstance任务栈 Activity C Activity C Activity C Activity C

应用场景


参考资料


Android应用程序的Activity启动过程
Android入门:Activity四种启动模式


上一篇 下一篇

猜你喜欢

热点阅读