前言
有一個很古老的應用技巧,一直被各種大大小小的app用得樂此不疲,那就是雙擊返回鍵退出程序。今天就寫寫它的實現代碼,非常簡單而且實用。
正文
雙擊返回鍵退出程序,一般有兩種實現思路,一種是用一個布爾值變量來記錄按鍵事件,並通過線程延時來實現效果;另外一種是直接通過記錄按鍵時間計算時間差實現功能,現在就跟大家分享下代碼吧、O(∩_∩)O哈哈~
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裡面的語句退出程序。
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的語句退出程序。
PS:個人比較建議用時間差的方式來實現這個功能,因為代碼的簡單與穩定性都比線程延時相對好很多。