关于 Android 四种启动模式和应用场景

背景

在 Android 开发中,遇到一个场景 Bug。

  • 在回调事件中启动另外一个 Activity 过程中,存在点击速度太快(即在页面未转跳之前,双击甚至多次快速点击)会多次启动该 Activity ,启动后点击返回按钮需要多次返回,具体场景看动图。

翻阅大量资料后,在官方文档发现在 AndroidMainfest 的 Activity 标签下有一个名为 android:launchMode 的属性(详细见下图)。

关于 Android 四种启动模式和应用场景_第1张图片

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

你可能感兴趣的:(Android)