【已解决】Creator 生成的安卓项目中启动原生 Activity 后台会有两个 Task 栈的问题

  • Creator 版本:v2.1.0

  • 目标平台: Android

  • 详细报错信息,包含调用堆栈:无

  • 重现方式:拉起一个新的原生 Activity

游戏中对接了第三方的广告 SDK,测试中发现在游戏中拉起广告的 Activity,开始播放广告,这时通过 Home 键切回手机系统界面,在调出后台任务管理器,发现游戏的主 Activity 和广告的原生 Activity 分别是两个任务栈,并不是广告 Activity 和游戏主 Activity 是同一个栈,请问这个是什么原因导致的?

具体现象如图,正常的行为应该是广告播放时,广告的 Activity 在游戏主 Activity 栈的顶部,而不应该是这样分成两个 Task 栈

android:taskAffinity=""
你 试试manifest 中删除上边的那一行,或者让taskAffinity 不要为空。
我之前跟你遇到相似问题

感谢你!亲测有效!

你可能先要看这篇文章

https://juejin.im/post/5935081d2f301e006b09cb9e

简单基础

  1. Activity 是放在栈中,遵循后进先出原则
  2. Activity 有4种启动模式,其中只有 singleTask (栈内复用)模式下, taskAffinity 才会生效
  3. taskAffinity 是指你这个 Activity 要放在哪个栈中,相当于指定栈的名字

问题分析

回到你这里的结果,我基本能猜测到 这个 Activity 只会是下面几种情况的组合,不会有更多了,(否则就不会是有两个栈)

  1. standard
  2. singleTask 并且没有指定Android:taskAffinity
  3. singleTask 并且指定了Android:taskAffinity的值,但值不是”“
  4. singleInstance

考虑到广告Activity是类单例模式,所以基本不会是standard,那么剩下的可能就只是2,3,4了

然后在看楼上的做法,并且能解决掉你的问题,那么就 4 也可能排除掉,否则在4的情况下,这个做法是不能解决这个问题的

那么,这个广告 Activity 就只能2或者3的配置

解决方案分析

在上面分析之后,在来分析下为什么解决方案是正确的

因为这么改动之后,表示 AppActivity 所在的栈就是默认的栈名(一般就是包名,不用在意这个名字),那么在此之上,你这个广告 Activity 基本就是上述2的情况,然后才会是 ”解决“ 了,否则,如果是3的情况,那么问题依旧存在