Android开发:点击paymentActivity返回键未跳转cartActivity反而关闭应用
安卓双Activity返回跳转失败问题解决方案
问题根因分析
点击PaymentActivity返回键直接退出应用,本质原因是Activity返回栈中已经不存在CartActivity实例,PaymentActivity调用finish()销毁后栈为空,系统直接关闭应用。
排查与解决步骤
- 检查CartActivity跳转PaymentActivity的启动代码,删除多余的
finish()调用
错误写法示例:
移除上述// CartActivity中跳转逻辑 val payIntent = Intent(this, PaymentActivity::class.java) startActivity(payIntent) finish() // 这行代码会直接销毁CartActivity,导致返回时无上层页面finish()代码即可解决绝大多数场景的问题。 - 检查AndroidManifest.xml中的Activity配置
- 确认CartActivity没有配置
android:noHistory="true"属性,该属性会让Activity离开栈后自动销毁 - 确认PaymentActivity没有配置
android:launchMode="singleInstance"/singleTask,特殊启动模式会将Activity放入独立栈,销毁后独立栈为空直接退出应用,普通业务场景直接删除launchMode配置使用默认标准模式即可。
- 确认CartActivity没有配置
- 优化返回键重写逻辑
当前你重写的onBackPressed()仅调用finish(),和系统默认返回行为完全一致,属于冗余代码,可根据API版本选择合适的写法:- API 33及以上推荐使用OnBackPressedDispatcher实现,无需重写方法:
// PaymentActivity onCreate方法中添加 onBackPressedDispatcher.addCallback(this) { // 有自定义逻辑可在此处添加,无特殊需求直接调用finish即可 finish() }- 低版本兼容写法重写方法时可直接调用父类实现,无需手动写finish:
override fun onBackPressed() { super.onBackPressed() // 自定义逻辑在此处添加即可 } - 特殊场景适配:如果业务允许PaymentActivity被推送、桌面快捷方式等外部入口直接打开,返回时需要强制跳转回CartActivity的话,修改返回逻辑主动启动Cart:
override fun onBackPressed() { val cartIntent = Intent(this, CartActivity::class.java).apply { flags = Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP } startActivity(cartIntent) finish() }
内容的提问来源于stack exchange,提问作者yazhini
相关产品推荐
相关产品推荐

