Android基础:最易懂的Activity启动模式详解
来源:互联网 发布:我生也有涯而知也无涯 编辑:程序博客网 时间:2024/05/23 14:21
前言
- Android基础中的Activity启动模式非常重要
- 本文将介绍对Activity启动模式进行全面介绍
目录
1. 定义
即Activity启动的方式
2. 启动模式的类别
Android启动提供了四种启动方式:
- 标准模式(standard)
- 栈顶复用模式(singleTop)
- 栈内复用模式(singleTask)
- 单例模式(singleInstance)
3. 知识储备
- Activity的管理是采用任务栈的形式
- 任务栈采用“后进先出”的栈结构
- 每按一次Back键,就有一个Activity出栈
4. 具体介绍
4.1 标准模式(standard)
- 每启动一次Activity,就会创建一个新的Activity实例并置于栈顶
谁启动了这个Activity,那么这个Activity就运行在启动它的那个Activity所在的栈中。
如Activity A启动了Activity B(标准模式),那么B就会进入到A的栈中
因ApplicationContext没有任务栈,所以无法采用标准模式启动Activity。但可通过为待启动的Activity指定标记位:FLAG_ACTIVITY_NEW_TASK,那么在启动时就会为其创建一个新的任务栈(这实际上是采用了singleTask启动模式)
4.2 栈顶复用模式(singleTop)
- 如果需要新建的Activity位于任务栈栈顶,那么此Activity的实例就不会重建,而是重用栈顶的实例( 调用实例的 onNewIntent() 、不调用onCreate()和onStart())
- 否则就会创建该Activity新的实例,并放入栈顶
4.3 栈内复用模式(singleTask)
逻辑如下图:
需要的栈通过参数TaskAffinity决定。
4.4 单例模式(singleInstance)
- 作为栈内复用模式(singleTask)的加强版
- 打开该Activity时,直接创建一个新的任务栈,并创建该Activity实例放入新栈中
- 一旦该模式的Activity实例已经存在于某个栈中,任何应用再激活该Activity时都会重用该栈中的实例
让多个应用共享该栈中的该Activity实例。
- 使用场景:多个应用共享一个应用,不管谁激活该 Activity 都会进入同一个应用中。使用场景如闹铃提醒,将闹铃提醒与闹铃设置分离。
4.5 四种启动模式图解
5. 四种启动模式的区别
5.1 决定打开的任务栈
- standard、singleTop启动模式的Activity的目标任务栈,和收到Intent的发送者在同一个任务栈内
- singleTask启动模式打开的任务栈由参数TaskAffinity决定
- singleInstance启动模式总是新建任务栈,不会被启动到一个其他任务栈里
5.2 是否允许多个相同的Activity实例
- standard、singleTop启动模式中,同一个Activity可以被实例化多次,并且存在于不同的任务栈中,且一个任务栈可以包括同一个Activity的多个实例;
- singleTask、singleInstance启动模式则限制只生成一个实例
5.3 是否允许不同的Activity实例存在于同一个任务栈内
- singleInstance启动模式独占一个任务栈,其它Activity实例不能存在于该任务栈里
- 另外三种模式,则可以和其它Activity实例共存于一个任务栈
5.4 是否每次都生成新实例
- standard模式:每次都生成新实例
- singleTop模式:若启动的Activity不在栈顶,则生成新实例;
- singleInstance模式:所在栈的唯一Activity实例,只会实例化一次,以后每次都被重用。
- singleTask模式:若启动的Activity不在栈内,则生成新实例;
6. 启动模式的设置
启动模式有两种设置方式:
- 在AndroidMainifest设置
- 通过Intent设置标志位
6.1 在AndroidMainifest设置
在AndroidMainifest的Activity配置进行设置<activityandroid:launchMode="启动模式"//属性//standard:标准模式//singleTop:栈顶复用模式//singleTask:栈内复用模式//singleInstance:单例模式//如不设置,Activity的启动模式默认为**标准模式(standard)**</activity>
6.2 通过Intent设置标志位
Intent inten = new Intent (ActivityA.this,ActivityB.class);intent,addFlags(Intent,FLAG_ACTIVITY_NEW_TASK);startActivity(intent);
标记位属性 6.3 二者设置的区别
- Intent设置方式比Manifest设置方式的优先级要高,即以前者为准
- 限定范围不同
Manifest设置方式无法设定FLAG_ACTIVITY_CLEAR_TOP标识;Intent设置方式无法设置单例模式(singleInstance)
7. 总结
- 本文对Android的Activity启动模式进行了全面介绍
- 接下来会介绍继续介绍Android开发中的相关基础知识,有兴趣可以继续关注Carson_Ho的安卓开发笔记
请点赞!因为你们的赞同/鼓励是我写作的最大动力!
相关文章阅读
Android开发:最全面、最易懂的Android屏幕适配解决方案
Android开发:史上最全的Android消息推送解决方案
Android开发:最全面、最易懂的Webview详解
Android开发:JSON简介及最全面解析方法!
Android四大组件:Service服务史上最全面解析
Android四大组件:BroadcastReceiver史上最全面解析
欢迎关注Carson_Ho的简书!
不定期分享关于安卓开发的干货,追求短、平、快,但却不缺深度。
0 0
- Android基础:最易懂的Activity启动模式详解
- Android基础:最易懂的Activity启动模式详解
- Android基础:最易懂的Activity启动模式详解
- 最易懂的Activity启动模式详解
- Android基础--Activity启动模式详解
- 【Android基础】-Activity启动模式详解
- 【Android】Activity的启动模式详解
- Android中Activity的启动模式详解
- Android中activity的启动模式详解
- Android ---Activity 的启动模式详解
- Android Activity 启动模式详解
- Android:Activity启动模式详解
- Android Activity 启动模式详解
- Android activity 启动模式 详解
- Android Activity启动模式详解
- Android Activity启动模式详解
- Android Activity启动模式详解
- 详解Android Activity---启动模式
- Qt图片调整之亮度调节
- 用IO写入和写出文档
- poj Arbitrage(Floyd||spfa)
- ES5,6,7浅析
- Markdown快速上手基本语法
- Android基础:最易懂的Activity启动模式详解
- linux中nginx的安装
- Java的多线程机制系列:(四)不得不提的volatile及指令重排序(happen-before)
- bzoj3224 Tyvj 1728 普通平衡树
- Java日志技术汇总(log4j , Commons-logging,.....)
- git 中github clone "Permission denied (publickey). fatal: Could not read from remote repository."
- PHP慢脚本日志和Mysql的慢查询日志
- tomcat下静态页面中文乱码
- C6-2 字符串的回文子序列个数