问题
业务需要,在主界面连续点击返回键退出应用,记录一下。
解决方案
先说结论,在主界面Activity中添加如下代码
/**
* 记录上次点击返回键时间
*/
private long lastClickTime = 0;
/**
* 两次回退点击时间间隔设置不小于2s
*/
public static final long TIME_INTERVAL = 2000;
...
...
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
exitApp();
return false;
}
return super.onKeyDown(keyCode, event);
}
/**
* 应用退出
*/
private void exitApp() {
if (System.currentTimeMillis() - lastClickTime > TIME_INTERVAL) {
//距离上次退出时间超过默认间隔时间,则认为不是连续点击,并记录新的点击时间
Toast.makeText(this, "连续两次点击退出应用",Toast.LENGTH_SHORT).show();
lastClickTime = System.currentTimeMillis();
} else {
this.finish();
System.exit(0);
}
}
...
...
- 1、 新增变量
lastClickTime
记录上次点击返回键时间。 - 2、 新增时间间隔常量
TIME_INTERVAL
。 - 3、 在回调方法
onKeyDown
中监听每次点击返回键。 - 4、 一旦点击返回键,且距离上次点击事件小于
TIME_INTERVAL
(这里设为两秒,实际可根据业务自行调整),则认为连续点击,退出应用。否则吐司弹窗提示,并记录最新点击时间。
混合开发应用的场景补充
- 在某些混合开发的App中,主界面由
WebView
控件构成,则需要考虑在每次点击返回键时,判断是否存在可回退Web页面。 - 如果有可回退Web页面,先回退网页,再判断是否连续点击退出应用。
代码如下:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// 是否可以回退网页
if (keyCode == KeyEvent.KEYCODE_BACK) {
if (webView.canGoBack()) {
webView.goBack();
return true;
} else {
exitApp();
return false;
}
}
return super.onKeyDown(keyCode, event);
}
网友评论