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

Android中如何实现非Launcher Activity按返回键退出应用

解决XTInitActivity按返回键直接退出应用的问题

方案一:启动XTInitActivity时清理任务栈

修改Launcher Activity中SplashFragment里启动XTInitActivity的代码,给Intent添加标记,将XTInitActivity设为新任务栈的根,同时清除原有栈中的Launcher Activity:

fun initListeners() {
    val DURATION = 2500
    user_app.toString()

    val handler = Handler()
    handler.postDelayed({
        if (user_app.isEmpty() && pwd_app.isEmpty()) {
            navigationToLogin()
        } else {
            Toast.makeText(safeActivity, "Sesión iniciada ${OPERATOR_APP.getPreferenceToString().toString()}", Toast.LENGTH_SHORT).show()
            // 修改启动逻辑,添加任务栈清理标记
            val intent = Intent(safeActivity, XTInitActivity::class.java)
            intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
            startActivity(intent)
            // 可选:关闭当前Launcher Activity(因flags已清栈,此步可省略)
            safeActivity.finish()
        }
    }, DURATION.toLong())
}

修改后XTInitActivity会成为任务栈的唯一根Activity,按下返回键时直接退出应用,不会回到Launcher Activity。

方案二:在XTInitActivity中拦截返回键事件(适配最新API)

由于onBackPressed()已被废弃,推荐使用OnBackPressedDispatcher处理返回逻辑。结合XTInitActivity中的导航Fragment,可判断当前是否处于导航首页,再决定退出应用还是返回上一个Fragment:

class XTInitActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_xt_init)

        // 替换为你实际的导航容器ID
        val navController = findNavController(R.id.nav_host_fragment_xt_init)

        // 添加返回键回调
        onBackPressedDispatcher.addCallback(this, object : OnBackPressedCallback(true) {
            override fun handleOnBackPressed() {
                // 判断是否处于导航栈起始页
                if (navController.currentDestination?.id == navController.graph.startDestinationId) {
                    // 清除整个任务栈并退出应用
                    finishAndRemoveTask()
                } else {
                    // 正常返回上一个Fragment
                    navController.popBackStack()
                }
            }
        })
    }
}
  • finishAndRemoveTask()会关闭当前Activity并移除整个任务栈,是符合Android规范的退出方式。
  • 回调参数true表示默认启用拦截,会覆盖系统默认的返回键行为。

内容的提问来源于stack exchange,提问作者Alexis Vilchis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 21:05:13