关于 Android(安卓)四种启动模式和应用场景
16lz
2021-01-25
背景
在 Android 开发中,遇到一个场景 Bug。
- 在回调事件中启动另外一个 Activity 过程中,存在点击速度太快(即在页面未转跳之前,双击甚至多次快速点击)会多次启动该 Activity ,启动后点击返回按钮需要多次返回,具体场景看动图。
翻阅大量资料后,在官方文档发现在 AndroidMainfest 的 Activity 标签下有一个名为 android:launchMode 的属性(详细见下图)。
LaunchMode (启动模式)
官方文档解析如下:
android:launchMode 是有关如何启动 Activity 的指令。共有四种模式与 Intent 对象中的 Activity 标志(FLAG_ACTIVITY_*常量)
作用
Activity的启动模式的应用的设置是和它的开发场景有关系的,在App中打开新的Activity的基本上分为两种情况:
- 目标Activity是本应用中的Activity,即它的启动模式是可以直接在fanifest中配置或者默认为standard,任务栈也可以自己随意设置;
- 目标Activity是第三方App中的Activity,这个时候就需要先考虑打开新Activity的是和自己App放在同一任务栈中还是新的task中,然后考虑Activity的启动模式; 所以Android提供了优先级更高的设置方式在Intent.setFlags(int flags),通过这setFlags就可以为打开第三方的App中Activity设置任务栈和启动模式了,具体设置就自己去看源码了。
应用场景
详细看表格:
LaunchMode | 场景 |
---|---|
standard | 邮件、默认场景 |
SingleTop | 登录界面、WXPlayEntryActivity、WXEntryActivity、推送通知栏 |
SingleTask | 程序模块逻辑入口:(Fragment 的 ContainerActivity)、WebView 页面、扫一扫页面;电商APP:购物页面、确认订单页面、付款页面 |
SingleInstance | 系统 Launcher、锁屏键、来电显示等系统应用 |
更多相关文章
- 安全新手入坑——HTML标签
- Nginx系列教程(四)| 一文带你读懂Nginx的动静分离
- No.11 使用firewall配置的防火墙策略的生效模式
- 高级Redis应用进阶课 一站式Redis解决方案
- uni-app系统目录文件上传(非只图片和视频)解决方案
- 基于Android(安卓)Webview的Hybrid App开发的前端优化
- cocos2d-x for android:HelloWorld 解读
- WeakReference在android中的使用场景
- 音乐你的生活—Android(安卓)QQMusic 设计实录