方法一:
【原理】:定义一个boolean型变量canExit ,每一次点击时判断canExit 是否为true,是则退出;否则,令canExit = true,同时添加一个延时线程,设置2秒后将canExit 设置为false,确保2秒内双击才可退出。
private ExitRunnable mExitRunnable;
private boolean canExit = false;
// 双击退出间隔时长
private final static int DOUBLE_CLAP_TIME = 2*1000;
/**
* 【双击退出】*/
@Override
public void onBackPressed() {
if (canExit) {
finish();
super.onBackPressed();
} else {
canExit = true;
if (mExitRunnable == null) {
mExitRunnable = new ExitRunnable();
}
new Handler().postDelayed(mExitRunnable, DOUBLE_CLAP_TIME);
}
}
private class ExitRunnable implements Runnable {
@Override
public void run() {
canExit = false;
}
}
方法二:n次点击实现方法
【原理】:定义一个n位long型数组,记录最近n次点击的时间,若时间差值小于定义的n击时间,则执行点击退出代码。双击即令n = 2。
long[] mHits = new long[n];
private final static int N_CLAP_TIME = 2*1000;
private void doubleClick(){
// 实现左移
System.arraycopy(mHits, 1, mHits, 0, mHits.length - 1);
// 将最后一个位置更新为距离开机的时间,如果最后一个时间和最开始时间小于2000,即n击
mHits[mHits.length - 1] = SystemClock.uptimeMillis();
if ( N_CLAP_TIME >= (mHits[mHits.length - 1] - mHits[0]) ) {
// 在这里写退出代码
// ......
}
}