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的回调,避免内存泄漏。
你原有代码的问题
- 逻辑顺序错误:你在
handleOnBackPressed中先将标记设为true,紧接着判断该标记并执行finish(),导致第一次点击就直接退出,完全不符合双击退出的逻辑。 - 冗余操作:不需要额外给按钮设置点击事件触发返回,系统返回键的事件会自动被
OnBackPressedCallback捕获处理。
内容的提问来源于stack exchange,提问作者Darksymphony
相关产品推荐
相关产品推荐

