前言
有一個很古老的應用技巧,一直被各種大大小小的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:個人比較建議用時間差的方式來實現這個功能,因為代碼的簡單與穩定性都比線程延時相對好很多。
如果有更好的實現方式,歡迎大家一起探討哈~
作者:enjoy風鈴
出處:http://www.cnblogs.com/net168/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則下次不給你轉載了。