// 特性:用户明确双击退出时,不显示提示,意外单击时,提示双击可退出应用
// 自我测试,明确双击退出时,双击时间在130 ms(误差20 ms)内。模拟缓慢双击测试,时间在200-375 ms之间,于是确定双击时间在400ms内不提示,超出后显示“再点击一次退出应用”,用户从看到提示到再次单击有1600 ms时间。
long[] mHits = new long[2];
@Override
public void onBackPressed() {
System.arraycopy(mHits, 1, mHits, 0, mHits.length - 1);
//实现左移,然后最后一个位置更新为距离开机的时间,如果最后一个时间和最开始时间小于2000,即n击
mHits[mHits.length - 1] = SystemClock.uptimeMillis();
long spaceTime = mHits[mHits.length - 1] - mHits[0];
if ( 2*1000 >= spaceTime ) {
finish();
isDoubleClick = true;
}else {
if (mExitRunnable == null) {
mExitRunnable = new ExitRunnable();
}
new Handler().postDelayed(mExitRunnable, 400);
}
}
boolean isDoubleClick = false;
ExitRunnable mExitRunnable;
private class ExitRunnable implements Runnable {
@Override
public void run() {
if (!isDoubleClick){
Toast.makeText(MainActivity.this, "再点击一次可退出应用!", Toast.LENGTH_SHORT).show();
}
}
}