Compose Navigation中App Link合成返回栈在Android13失效问题咨询
Android 13 App Link 启动起始目标页面返回栈问题解答
这确实是Android 13针对App Link启动的默认行为变更,和低版本的处理逻辑存在差异。
问题原因
通过adb命令启动时,系统会默认将应用的主Activity纳入返回栈,符合导航原则里起始目标入栈的要求;但Android 13优化了App Link的启动流程,默认只会直接打开目标页面,不会自动构建包含主页面的返回栈,所以按下返回键会直接退出应用。
解决方法
有几种可行的修复方式:
用TaskStackBuilder手动构建返回栈
在处理App Link的Activity中,接收到VIEW Intent时,手动创建包含主页面的任务栈,再启动目标页面。示例代码:val taskStackBuilder = TaskStackBuilder.create(this) // 先添加应用主页面到返回栈 taskStackBuilder.addNextIntent(Intent(this, MainActivity::class.java)) // 再添加当前要打开的目标页面 taskStackBuilder.addNextIntent(intent) // 启动完整栈 taskStackBuilder.startActivities() // 关闭当前直接启动的页面 finish()调整Navigation Component的DeepLink配置
如果使用Navigation组件,确保导航图中起始目标的DeepLink配置了正确的返回栈规则。比如在DeepLink标签里设置android:popUpTo="@id/main_dest"并将android:popUpToInclusive设为false,保证主页面留在返回栈中;或者在处理DeepLink请求时,用NavDeepLinkBuilder构建包含返回栈的启动Intent:val deepLinkIntent = NavDeepLinkBuilder(this) .setGraph(R.navigation.nav_graph) .setDestination(R.id.target_dest) .createTaskStackBuilder() .intent startActivity(deepLinkIntent)检查Activity启动模式
确保处理App Link的Activity没有设置singleInstance或singleTask这类会破坏返回栈的启动模式,尽量使用默认的standard模式,避免干扰系统的栈管理逻辑。
内容的提问来源于stack exchange,提问作者Chethan N
相关产品推荐
相关产品推荐

