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); }