Android前台同时存在两个Activity的实现原理相关技术问询
功能实现核心逻辑
这个效果完全基于Android原生提供的任务栈机制实现,没有违背系统原有设计逻辑,具体实现方案如下:
- 独立任务栈配置
通话场景对应的Activity会单独指定和主应用不同的taskAffinity属性,这个属性是Android系统用于划分任务栈的核心标识,属性值默认是应用的包名,只要给通话Activity设置不一样的taskAffinity值,就能让它归属于独立的任务栈,和主界面的任务栈完全隔离。 - 启动模式与Flag配置
两种常用的配置方式二选一即可实现效果:- 在
AndroidManifest.xml中给通话Activity配置android:launchMode="singleInstance",系统会自动为它创建独立任务栈,且整个任务栈只存在这一个Activity实例 - 启动通话Activity时给Intent添加
FLAG_ACTIVITY_NEW_TASK+FLAG_ACTIVITY_MULTIPLE_TASK组合标记,每次启动都会生成新的独立任务栈,不需要提前在Manifest中写死配置
- 在
- 最近任务列表适配
Android系统默认会给每一个活跃的任务栈在最近任务列表生成独立的卡片入口,所以两个任务栈会分别显示为两个独立的应用卡片,用户可以自由切换,操作逻辑和两个独立应用完全一致,两个任务栈的生命周期互相独立,切后台也不会互相影响。
额外说明
如果需要实现相同效果但不想让独立任务栈的Activity显示在最近任务列表,只需要给对应Activity添加android:excludeFromRecents="true"配置即可,Messenger没有加这个配置,所以两个卡片都会对用户可见。
内容的提问来源于stack exchange,提问作者intbh
相关产品推荐
相关产品推荐

