針對網上流傳的 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);  
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM