方法一:通过重写onKeyDown()方法 + Timer + TimerTask的方式:
1、定义变量
private boolean isExit = false;
private Timer timer;
2、重写onKeyDown方法:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK){
doubleClickToExit();
return true;
}
return super.onKeyDown(keyCode, event);
}
3、doubleClickToExit()方法:
private void doubleClickToExit() {
if (!isExit){
Toast.makeText(getApplicationContext(), "再按一次退出程序", Toast.LENGTH_SHORT).show();
isExit = true;
timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
isExit = false;
}
}, 1500);
}else{
MainActivity.this.finish();
System.exit(0);
}
}
4、在onDestroy中取消Timer,防止产生异常:
@Override
protected void onDestroy() {
super.onDestroy();
if (timer != null){
timer.cancel();
timer = null;
}
}
方法二:通过重写onKeyDown()方法 + HandlerThread + Runnable的方式(包装成了工具类):
1、工具类:
public class ExitUtils{
private boolean isExit = false;
Runnable runnable = new Runnable() {
@Override
public void run() {
isExit = false;
}
};
public void doubleClickToExit(){
isExit = true;
HandlerThread mHandlerThread = new HandlerThread("doExitTsk");
mHandlerThread.start();
new Handler(mHandlerThread.getLooper()).postDelayed(runnable, 1500);
}
public boolean getIsExit() {
return isExit;
}
public void setIsExit(boolean isExit) {
this.isExit = isExit;
}
}
2、在主Activity中引用
private ExitUtils exitUtils = new ExitUtils();
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK){
doubleClickToExit2();
return true;
}
return super.onKeyDown(keyCode, event);
}
private void doubleClickToExit2() {
if (exitUtils.getIsExit()){
System.exit(0);
this.finish();
}else {
Toast.makeText(getApplicationContext(), "再按一次退出程序", Toast.LENGTH_SHORT).show();
exitUtils.doubleClickToExit();
}
}