android activity的4种启动模式
在AndroidMainfest.xml文件配置activity节点时,可以指定Activity的启动模式属性,android:launchModel 属性 ,可以指定四种启动模式:
中文名字是我自己根据他的特称和理解定义的。
分别是:standard 基本启动模式 (默认)
singleTop 栈顶单例启动模式
singleTask 任务单例启动模式
singleInstace 单实例启动模式
Standard:
在应用程序中,每启动一个活动,都会在返回栈顶。如果我们为FirstActivity 创建一个按钮,通过Intend启动一个FirstActivity 程序会为我们创建新的Activity 放入栈顶,如图所示。 这种启动模式是默认的。
singleTop
如果在AndroidMainfest.xml 中的FirstActivity android:launchModel指定为singleTop,这时在上一个测试中,由于FirstActivity处于栈顶的位置,程序就不会创建一个新的Activity 。 如果进入了一个SecondActivity ,当SecondActivity处于栈顶的时候,在SecondActivity中通过Intent启动FirstActivity时 ,由于FirstActivity 并未处于栈顶,则会创建一个新的Activity 如图
活动处于栈顶的时候,就是单例的。如果活动并未处于栈顶,则就要像standard一样 创建一个新的Activity。正如名字singleTop一样。
singleTask:
会想到,如果要是整个任务中的几个活动都不能重复,该如何设定,sinleTask就是这么一种模式,在启动活动的时候,系统会检查返回栈中的活动实例是否已经存在,如果存在,那个实例上的活动全部弹栈,启动那个活动,不会创建一个新的活动。
如图:
这个SingleTask名字让我有些疑惑,Task是一些活动的集合,那么一个程序中会有多个Task么,根据我自身的基本意识,觉得程序当中肯定会有多个Task。但是这个模式又是说程序会检查整个返回栈中是否有重复,那么这个名字是否应该定义成singleStack呢。 有些疑惑,初学。
singleInstance
活动是可以被多个应用程序共享,当其他应用程序需要调用本应用程序中的活动的时候,就可以将Activity设置为共享Activity 为这个Activity 单独的创建一个返回栈。这个返回栈是多个应用程序共享的。我们可以通过getTaskId()方法得到当前的返回栈的ID,就可以去区分当前的Activiyt所在的栈是哪个。
上图:
参考图书:
《第一行代码》 人民邮电出版社
更多相关文章
- Android学习 之 活动与任务
- onStartCommand 的返回值
- 高通msm8994启动流程简介
- 安卓启动流程
- Task和Activity相关
- Android(安卓)开发艺术探索笔记(18)
- Android(安卓)Service 详解(上)
- Android的Activity的启动流程分析
- Android(安卓)源码解析之Adapter和AdapterView与适配器模式