You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么Android Deeplink在应用退后台后无法跳转至指定Activity?

根因说明

1. Deeplink未跳转到SplashActivity的原因

Android系统的任务栈复用机制导致该问题:
默认情况下,通过隐式Deeplink Intent启动其他应用的Activity时,系统会优先检查目标应用是否存在处于后台的活跃任务栈。你首次跳转后应用B的任务栈中已经仅剩下MainActivity(SplashActivity启动MainActivity后调用finish()自行销毁,已从任务栈中移除),此时应用B退至后台,任务栈处于存活状态。
第二次触发Deeplink跳转时,系统匹配到应用B的后台任务栈后,会直接将整个任务栈切到前台,不会新创建SplashActivity实例,因此你无法收到SplashActivity的生命周期回调,最终展示的是任务栈栈顶的MainActivity。

2. intent.data为空的原因

系统将后台任务栈拉到前台时,若栈顶的MainActivity已经实例化,会触发其onNewIntent回调携带新的Deeplink Intent,而你在onResume中调用getIntent()获取到的是MainActivity首次创建时对应的旧Intent,该Intent原本就没有携带Deeplink参数,因此取到的data为空。

可选修复方案
  • 方案1(强制走SplashActivity跳转逻辑):给应用B的SplashActivity在AndroidManifest.xml中配置android:launchMode="singleTask",同时应用A跳转Deeplink时给Intent添加FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TOP标记,确保每次跳转都会在应用B的任务栈中创建新的SplashActivity实例,清空任务栈中已存在的上层Activity。
  • 方案2(不修改跳转逻辑,仅修复参数获取问题):在MainActivity中重写onNewIntent(Intent intent)方法,主动调用setIntent(intent)更新当前Activity持有的Intent,后续在onResume中取getIntent().getData()即可获得最新的Deeplink参数。

内容的提问来源于stack exchange,提问作者Yuki N

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 00:00:05