关于使用CountDownTimer实现onBackPressed功能的问题求助
使用CountDownTimer实现onBackPressed双击退出功能方案
实现逻辑
通过CountDownTimer控制2秒的返回键响应窗口,首次点击返回键弹出提示,若2秒内再次点击返回则退出应用,超时后重置点击状态。
Kotlin 实现代码
1. 全局变量声明
在Activity类内定义两个全局变量:
// 标记是否已经点击过一次返回键 private var isBackPressedOnce = false // 倒计时器实例 private lateinit var backPressTimer: CountDownTimer
2. 初始化倒计时器
在onCreate方法中初始化CountDownTimer,设置总时长为2000毫秒(2秒):
backPressTimer = object : CountDownTimer(2000, 1000) { override fun onTick(millisUntilFinished: Long) { // 倒计时过程无需额外处理 } override fun onFinish() { // 倒计时结束,重置点击标记 isBackPressedOnce = false } }
3. 重写onBackPressed方法
override fun onBackPressed() { if (isBackPressedOnce) { // 第二次点击返回,取消计时器后执行退出逻辑 backPressTimer.cancel() super.onBackPressed() return } // 首次点击返回,更新标记、弹出提示、启动倒计时 isBackPressedOnce = true Toast.makeText(this, "再按一次退出应用", Toast.LENGTH_SHORT).show() backPressTimer.start() }
4. 避免内存泄漏
在onDestroy生命周期中主动取消计时器:
override fun onDestroy() { super.onDestroy() if (::backPressTimer.isInitialized) { backPressTimer.cancel() } }
Java 实现代码
1. 全局变量声明
private boolean isBackPressedOnce = false; private CountDownTimer backPressTimer;
2. 初始化倒计时器
在onCreate方法中初始化:
backPressTimer = new CountDownTimer(2000, 1000) { @Override public void onTick(long millisUntilFinished) { } @Override public void onFinish() { isBackPressedOnce = false; } };
3. 重写onBackPressed方法
@Override public void onBackPressed() { if (isBackPressedOnce) { backPressTimer.cancel(); super.onBackPressed(); return; } isBackPressedOnce = true; Toast.makeText(this, "再按一次退出应用", Toast.LENGTH_SHORT).show(); backPressTimer.start(); }
4. 销毁时取消计时器
@Override protected void onDestroy() { super.onDestroy(); if (backPressTimer != null) { backPressTimer.cancel(); } }
内容的提问来源于stack exchange,提问作者Muhammad Abdullah
相关产品推荐
相关产品推荐

