launchMode的应用场景

launchMode的应用场景

四种launchMode启动模式

standard模式

默认的启动模式。每次启动一个Activity,都会创建一个新的Activity实例放在Task栈顶。这个Task栈是启动新的Activity的Activity所在的Task栈。那么这时候就会有特殊的情况,如果是service或者Application启动的Activity,并没有Task栈,这时就需要我们通过addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)指定标记,创建一个新的Task。

app的大多数Activity皆采用这种启动模式。作为开发者,我们考虑到的就是用户在操作每个页面后,即使之间有重复的界面,按回退键也可以按照刚刚操作的顺序回退。

singleTop模式

这种模式存在两种情况:

  • Task栈顶不是要启动的Activity实例,这时和standard模式没有区别
  • Task栈顶是要启动的Activity实例,那么就会复用这个实例,并且回调该Activity的onNewIntent方法。由于不会创建Activity实例,所以不会回调其他方法。

比如说音乐软件的点击上一首下一首,通知详情页或者聊天界面,即通过点击通知栏消息进入Activity。可以避免有多次通知消息通过点击而产生较多Activity实例。增强Activity的复用性。

singleTask

这种模式有三种情况。

  • Task栈中不存在要启动的Activity实例,这时和standard模式没有任何区别
  • Task栈中存在要启动的Activity实例,且此实例在栈顶,这时和singleTop模式没有区别
  • Task栈中存在要启动的Activity实例,且此实例不在栈顶。这时会移除此实例上的所有Activity实例,使此实例置于Task栈顶,并复用此实例,回调onNewIntent方法

也就是说这是一种栈内的单例模式。这种模式下还可以通过manifest文件中的taskAffinity属性来指定要加载的Task栈。

ini 复制代码
<activity 
    android:name=".activitys.MainActivity"
    android:launchMode="singleTask"
    android:taskAffinity="com.gl.task"/>

关于taskAffinity的值:每个Activity都有taskAffinity属性,这个属性指出了它希望进入的Task。如果一个Activity没有显式的指明该Activity的taskAffinity,那么它的这个属性就等于Application指明的taskAffinity,如果Application也没有指明,那么该taskAffinity的值就等于包名。

这种模式一般适用于软件的首页。

singleInstance模式

这种模式算是一种全局的单例模式,即只要有任何一个栈存在此Activity实例,就会复用此实例,回调onNewIntent方法。如果此实例不存在,那么就会创建新的Task栈,并放入Activity实例。

也就是说,这种模式下的Activity实例只有两种形式。

  • 不存在此实例
  • 存在此实例,且只在一个Task栈中并且该Task中只有该实例

这种模式一般应用于闹钟响铃界面、拨打接听电话界面等系统界面,确保此Activity实例只能存在一个。

相关推荐
深度学习04071 小时前
MySQL InnoDB Cluster 部署完整文档
android·mysql·adb
邪修king2 小时前
Re:Linux系统篇(三十七):进程间通信Chapter4:System V 共享内存深度解析:为什么它是最快的 IPC?
android·linux·运维
用户337922545682 小时前
Kiora SDK:在 Android 上组织端侧模型、工具与 A2A 协作
android
洞见前行2 小时前
你在 XML 时代学的渲染优化,进了 Compose 大多不再是重点——Recomposition 才是新的战场
android
ii_best2 小时前
按键精灵手机助手 v5.2.1 实测:inputText 逐字延时 + 调试面板多行复制,安卓脚本开发的两个输入痛点一次解决
android·开发语言·智能手机·自动化·ai编程·按键精灵
hunterandroid3 小时前
OkHttp 源码解析:拦截器链、连接池与缓存策略的设计精髓
android
蒲公英内测分发3 小时前
智能手环出海测试,海外合作方分散在不同国家,Android 测试包怎么持续分发和更新?
android·前端·人工智能·测试工具·智能手表
朱涛的自习室3 小时前
高价软件已死,我让 AI 开启了「平替计划」(Day 7 / 7)
android·前端·github
脚踏实地,坚持不懈!3 小时前
Android 图形系统:图形总览 + SurfaceFlinger 与 WindowManager
android