記一次Android完整項目(5) 雙擊返回鍵退出程序

雙擊返回鍵退出程序詳解

雙擊返回鍵退出程序,通常有兩種實現思路,一種是用一個布爾值變量來記錄按鍵事件,並經過線程延時來實現效果;另一種是直接經過記錄按鍵時間計算時間差實現功能java

1. 利用線程延時實現
private static boolean mBackKeyPressed = false;//記錄是否有首次按鍵
    
@Override
public void onBackPressed() {
  if(!mBackKeyPressed){
    Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show();
    mBackKeyPressed = true;
    new Timer().schedule(new TimerTask() {//延時兩秒,若是超出則擦錯第一次按鍵記錄
      @Override
      public void run() {
        mBackKeyPressed = false;
      }
    }, 2000);
  }
  else{//退出程序
    this.finish();
    //System.exit(0);
  }
}
複製代碼

經過mBackKeyPressed 來記錄是否有首次按返回鍵的記錄,若是不存在首次按鍵記錄,則Toast提示,並記錄首次按鍵記錄,並啓動線程在2秒後擦除該按鍵記錄。若是在線程海內擦除mBackKeyPressed 時又按下返回鍵,則執行else裏面的語句退出程序。ide

2. 經過計算時間差實現
private long mPressedTime = 0;
    
@Override
public void onBackPressed() {
  long mNowTime = System.currentTimeMillis();//獲取第一次按鍵時間
  if((mNowTime - mPressedTime) > 2000){//比較兩次按鍵時間差
    Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show();
    mPressedTime = mNowTime;
  }
  else{//退出程序
    this.finish();
    System.exit(0);
  }
}
複製代碼

這裏是經過控制時間差來實現功能的,在首次按下返回鍵時,將會將當期時間賦值給mPressedTime並經過Toast提示用戶,在第二次按下返回鍵時,若是與 mPressedTime記錄的時間差值大於2秒則從新刷新mPressedTime的時間,若是小於2秒則執行else的語句退出程序。this

建議用時間差的方式來實現這個功能,由於代碼的簡單與穩定性都比線程延時相對好不少。
相關文章
相關標籤/搜索