You need to enable JavaScript to run this app. 安卓Deep Link跳转生成多实例,设置singleTask启动模式仍未解决
优惠活动
大模型
产品
解决方案
定价
更多

安卓Deep Link跳转生成多实例,设置singleTask启动模式仍未解决

多实例问题排查与解决方案

  • 首先你的第一个疑问:通过tools:replace设置配置优先级的方案是可行的,仅适用于主模块的launchMode配置被第三方依赖库的清单配置覆盖的场景。添加配置后会强制清单合并时优先使用当前主模块的配置,覆盖所有依赖库中的同名属性配置,示例如下:
<activity
    android:name=".你要跳转的目标Activity全类名"
    android:launchMode="singleTask"
    tools:replace="android:launchMode">
    <!-- 原有Deep Link对应的intent-filter配置 -->
</activity>
  • 接下来验证你推测的新旧版本多实例问题:直接在系统设置的应用列表中检查是否存在两个包名相近/相同的同应用实例,测试场景下如果应用签名不一致、或者修改过applicationId后缀,会导致同一设备安装多个应用实例,Deep Link跳转时如果用户先后选择了不同实例就会出现你描述的问题,这种场景不需要修改代码,直接卸载多余的测试版本应用即可恢复正常。
  • 额外排查修复项:
    • 检查外部调用Deep Link时的Intent是否添加了FLAG_ACTIVITY_NEW_TASK标识,部分Android版本下外部调用强制加该标识会绕过singleTask逻辑创建新实例,你可以在目标Activity的onCreate方法中添加校验逻辑,检测到重复实例时直接销毁,仅保留合法实例:
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // 非任务栈根节点说明是重复启动的实例,直接销毁
    if (!isTaskRoot()) {
        finish();
        return;
    }
    // 原有业务逻辑
}
  • 检查目标Activity是否配置了独立的android:process属性,不同进程下的Activity不属于同一个任务栈,singleTask配置不会生效,这种场景需要调整进程配置,保证目标Activity和应用主进程一致。
  • 如果你需要仅保留新跳转生成的实例、销毁旧实例,不需要通过tools:replace实现,可以将launchMode调整为singleTop,同时在onNewIntent方法中处理跳转参数后主动销毁旧实例即可。

内容的提问来源于stack exchange,提问作者Mehrdad Dolatkhah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 13:36:07