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

Android双击系统返回键退出应用:替换已废弃的onBackPressed方法

替代废弃的onBackPressed实现双击返回退出应用

正确实现代码(Java)

private boolean doubleBackToExitPressedOnce = false;
private Handler backHandler = new Handler(Looper.getMainLooper());

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // ... 其他初始化代码

    // 添加系统返回键回调
    onBackPressedDispatcher.addCallback(this, new OnBackPressedCallback(true) {
        @Override
        public void handleOnBackPressed() {
            if (doubleBackToExitPressedOnce) {
                // 第二次点击,执行退出
                finish();
                return;
            }

            // 第一次点击,标记状态并显示提示
            doubleBackToExitPressedOnce = true;
            showMsgSnack(getString(R.string.pressexit));

            // 2秒后重置标记
            backHandler.postDelayed(() -> doubleBackToExitPressedOnce = false, 2000);
        }
    });
}

@Override
protected void onDestroy() {
    super.onDestroy();
    // 移除未执行的回调,避免内存泄漏
    backHandler.removeCallbacksAndMessages(null);
}

逻辑说明

  • 首次点击系统返回键时,标记doubleBackToExitPressedOnce为true,显示提示Snackbar,并通过Handler在2秒后重置标记。
  • 若2秒内再次点击返回键,直接调用finish()退出当前Activity(单Activity场景下即退出整个应用)。
  • 在onDestroy中移除Handler的回调,避免内存泄漏。

你原有代码的问题

  1. 逻辑顺序错误:你在handleOnBackPressed中先将标记设为true,紧接着判断该标记并执行finish(),导致第一次点击就直接退出,完全不符合双击退出的逻辑。
  2. 冗余操作:不需要额外给按钮设置点击事件触发返回,系统返回键的事件会自动被OnBackPressedCallback捕获处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 19:40:30