目前网上比较流行的方法是两种,不过思路都是一样的:
代码一:
private static Boolean isExit = false; private static Boolean hasTask = false; Timer tExit = new Timer(); TimerTask task = new TimerTask() { @Override public void run() { isExit = false; hasTask = true; } }; @Override public boolean onKeyDown(int keyCode, KeyEvent event) { // TODO Auto-generated method stub Log.i("smallpig", "user key down"); if(keyCode == KeyEvent.KEYCODE_BACK){ System.out.println("user back down"); if(isExit == false ) { isExit = true; Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show(); if(!hasTask) { tExit.schedule(task, 2000); }} else { } finish(); System.exit(0); } return super.onKeyDown(keyCode, event); }
代码二:
代码二
/**双击返回键退出程序*/ private long exitTime = 0; public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { if ((System.currentTimeMillis() - exitTime) > 2000) { Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show(); exitTime = System.currentTimeMillis(); } else { finish(); System.exit(0); } return true; } return super.onKeyDown(keyCode, event); }//end onKeyDown
在模拟器中调试过程发现每次点击返回后,模拟器都会假死一下,点什么都没反应,必须把模拟器重新获得焦点后才能继续操作,不知道是什么原因。。。