今天给大家介绍两种按两次返回退出程序的方式
我先说第一种(我认为比较好理解的):
首先在在全局定义(public void onCreate方法之外)
boolean isExit = false;//设置一个全局变量的退出标识(意思是是否退出,值为false) Handler exitHandler = new Handler(){ @Override public void handleMessage(Message msg) {//处理发送过来的消息 super.handleMessage(msg); isExit = false;//重置值为false(等下后面会改变isExit的值) } };
然后复写onKeyDown方法(也是在public void onCreate方法之外):
//(重点理解两个if) @Override public boolean onKeyDown(int keyCode, KeyEvent event) {//捕获按键动作发生的方法 if (keyCode == KeyEvent.KEYCODE_BACK){//判断是否按下的试返回键 if (isExit==false){ isExit = true; Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show(); exitHandler.sendEmptyMessageDelayed(0,2000);//延迟2秒发送消息给handleMessage处理 //亲们看好了,注意理解,第一次按下的时候就已经将isExit置为true了,到第二次在捕获到按下返回按钮的时候就是true了所以就不执行第二个if了直接执行eles{}中的方法就finish()关掉了,如果你超过了两秒sxitHandler的延时消息已经发送出去了 handleMessage方法又已经将isExit重置为false了所有又到了这段注释开头 }else{ finish(); System.exit(0); } return false; } return super.onKeyDown(keyCode, event); }
下面介绍第二种方法:
//退出时的时间 private long mExitTime; //对返回键进行监听 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) { exit(); return true; } return super.onKeyDown(keyCode, event); } public void exit() { if ((System.currentTimeMillis() - mExitTime) > 2000) { Toast.makeText(MainActivity.this, "再按一次退出程序", Toast.LENGTH_SHORT).show(); mExitTime = System.currentTimeMillis(); } else { finish(); System.exit(0); } }