针对网上流传的 Android 再按一次后退键退出应用程序方法改正
Android 中用户要退出应用程序,看到大部分退出应用程序的做法是:弹出一个对话框,用户点了确定后退出。个人觉得这用户体验有点不好,手指还要往屏幕中间移动再点 击。用户按了一次后退键,这可能用户是误按了后退键,并不想直接退出程序,给用户提示”再按一次后退键退出应用程序“,如果用户真想退出,直接再按一次后退键即可退出整个应用程序。
网上有好多实现方法,看到大部分人博客转的方法如下:
private static Boolean isExit = false; private static Boolean hasTask = false; Timer tExit = new Timer(); TimerTask task = new TimerTask() { public void run() { isExit = false; hasTask = true; } }; public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { if(isExit == false ) { isExit = true; Toast.makeText(this, "再按一次后退键退出应用程序", Toast.LENGTH_SHORT).show(); if(!hasTask) { tExit.schedule(task, 2000); } } else { finish(); System.exit(0); } } return false; }
看这逻辑,测试了下,如果用户第一次按了后退键,等2s再按一次后退键,再等2s再按一次后退键,第三次就直接退出了。看来这段代码只能实现用户第一次按后退键,2s之内再按后退键退出程序的功能而已。我把它改了下:
private static Boolean isExit = false; Timer tExit = new Timer(); MyTimerTask task; class MyTimerTask extends TimerTask{ public void run() { isExit = false; } } public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { if(isExit == false ) { isExit = true; Toast.makeText(this, "再按一次后退键退出应用程序", Toast.LENGTH_SHORT).show(); if(task!=null) task.cancel(); // 将原任务从队列中移除 task = new MyTimerTask(); // 新建一个任务 tExit.schedule(task, 2000); } else { finish(); System.exit(0); } } return false; }
以上经过测试,功能正常,还有一种简便方法:
private long exitTime = 0; public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN){ if((System.currentTimeMillis()-exitTime) > 2000){ Toast.makeText(getApplicationContext(), "再按一次后退键退出程序", Toast.LENGTH_SHORT).show(); exitTime = System.currentTimeMillis(); } else { //退出代码 } return true; } return super.onKeyDown(keyCode, event); }
专注移动互联网产品设计研发 分享最新的移动互联网产品和技术