为什么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
相关产品推荐
相关产品推荐

