背景

在 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、锁屏键、来电显示等系统应用

更多相关文章

  1. 安全新手入坑——HTML标签
  2. Nginx系列教程(四)| 一文带你读懂Nginx的动静分离
  3. No.11 使用firewall配置的防火墙策略的生效模式
  4. 高级Redis应用进阶课 一站式Redis解决方案
  5. uni-app系统目录文件上传(非只图片和视频)解决方案
  6. 基于Android(安卓)Webview的Hybrid App开发的前端优化
  7. cocos2d-x for android:HelloWorld 解读
  8. WeakReference在android中的使用场景
  9. 音乐你的生活—Android(安卓)QQMusic 设计实录

随机推荐

  1. Axis2与Android的Json(Gson)通信传数据
  2. Android获取版本号
  3. Android学习系列(40)--Android主题和样式
  4. android push notification serfice andr
  5. 有关Android中EditText的一些属性
  6. Android(安卓)ApiDemos示例解析(15):App->
  7. android中获得屏幕、视图、任务栏、状态
  8. Android(安卓)onSaveInstanceState和onRe
  9. android开发之interpolator的用法详解
  10. 初学者之Android(安卓)HelloWorld项目