Android开发——Activity启动模式详解
来源:互联网 发布:软件使用方法培训 编辑:程序博客网 时间:2024/06/03 13:39
1. Activity的启动模式
1.1 Standard标准模式
系统默认的启动模式,即便实例存在,每次启动都会创建一个新的实例,每个实例可以属于不同的任务栈。
若ActivityA以此模式启动了Activity B,那么B会进入A所在的栈。注意,若是非Activity类型的Context,如ApplicationContext,并没有任务栈,因此以ApplicationContext启动Standard模式的Activity会报错。我们可以在启动时创建一个新的任务栈,指定FLAG_ACTIVITY_NEW_TASK标记位。(此时实际上是以SingleTask模式启动)。标记为下文会讲述。
1.2 SingleTop栈顶复用模式
这种模式下,若新的Activity已位于栈顶,就不会重复创建。不同于Standard模式,此时这个Activity因为没有发生变化,它的onCreate、onStart不会被调用。
但是它的onNewIntent方法会被调用,通过此方法的参数可以得到请求信息。
1.3 SingleTask栈内复用模式
这种模式下,Activity想要的任务栈如果存在,并且此Activity在此栈中存在实例,多次启动此Activity都不会重新创建实例。同时该模式具有clearTop的效果,已存在的实例上面的Activity全部出栈。onNewIntent方法会被调用。若不存在该实例就新建并压入该栈。
如果想要的任务栈不存在,就新建一个任务栈,并创建Activity实例放入该栈。
1.4 SingleInstance单实例模式
具有SingleTask模式的所有特性,此模式启动的Activity只能单独位于一个任务栈(新建的)。后续请求除非这个特殊的任务栈被销毁,否则不会创建新的Activity实例。
如SingleTask模式一样,如果按照相同的模式再次某Activity,不重新创建,只是暂停onStop了下,并且调用onNewIntent方法。接着调用onResume就又继续了。
2. TaskAffinity属性
TaskAffinity属性标识了一个Activity所需要的任务栈的名字。默认为应用包名。
当TaskAffinity属性和SingleTask启动模式结合使用时,待启动的Activity会运行在名字和TaskAffinity相同的任务栈中。
当TaskAffinity属性和allowTaskReparenting结合使用时,若应用A启动应用B中的Activity C(C运行在A的任务栈中),并且此Activity的allowTaskReparenting = true,当应用B被启动后,B的主Activity不会显示,因为Activity C会直接从应用A的任务栈转移到应用B的任务栈中(因为C想要的任务栈被创建了),所以会显示Activity C。
3. 指定启动模式
3.1 通过AndroidMenifest.xml为Activity指定
3.2 通过Intent标识为Activity指定
两种设置方式,第一种优先级较低,并且无法直接给Activity设置FLAG_ACTIVITY_CLEAR_TOP标识。
第二种无法为Activity指定singleInstance模式。
4. Activity的Flags
大部分情况我们不需要为Activity设置标记位,下面介绍几种比较常用的标记位。
4. 1 FLAG_ACTIVITY_NEW_TASK
这种Activity标记位,作用是为Activity指定SingleTask的启动模式。和在清单文件里设置效果相同。
4. 2 FLAG_ACTIVITY_SINGLE_TOP
这种Activity标记位,作用是为Activity指定SingleTop的启动模式。和在清单文件里设置效果相同。
4. 3 FLAG_ACTIVITY_CLEAR_TOP
SingleTask模式默认具有此标记效果,即被启动Activity的实例已经存在,onNewIntent方法会被调用,已存在的实例上面的Activity全部出栈。
如果是Standard启动模式,那么它连同它之上的Activity都要出栈,并创建新的Activity实例入栈。
4. 4 FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
效果和在清单文件里指定android:excludeFromRecents = “true”相同。即不会出现在历史Activity列表中。
- Android开发——Activity启动模式详解
- Android开发——Activity启动模式详解
- Android——Activity启动模式详解
- Android开发 —— Activity启动模式
- android面试01—Android中Activity启动模式详解
- Android Activity 启动模式详解
- Android:Activity启动模式详解
- Android Activity 启动模式详解
- Android activity 启动模式 详解
- Android Activity启动模式详解
- Android Activity启动模式详解
- Android Activity启动模式详解
- 详解Android Activity---启动模式
- android开发之Activity启动模式图文详解
- Android开发9——Activity的启动模式
- Android开发:Activity启动模式
- 浅析Android—Activity的启动模式
- Android中Activity启动模式详解
- GetVersionEx 获取系统版本信息
- Hololens入门之手势识别(使用Navigation gesture控制物体旋转)
- checkbox select jquery 回显
- Eclipse配置jni头文件生成工具
- HTC Vive全屏
- Android开发——Activity启动模式详解
- 【Spring MVC】——普通文件上传
- Kubernetes用户指南(一)--快速开始、使用k8s配置文件
- 变量定义、变量声明、全局变量、静态变量、局部变量。
- 51822抓包实现
- DerbySoft 路由研习
- Android实战——Zxing实现二维码扫描
- asp.net MVC中form提交和控制器接受form提交过来的数据
- Kubernetes用户指南(二)--部署组合型的应用、连接应用到网络中