1集畅、利用線程延時(shí)實(shí)現(xiàn)
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() {//延時(shí)兩秒谤辜,如果超出則擦錯(cuò)第一次按鍵記錄
@Override
public void run() {
mBackKeyPressed = false;
}
}, 2000);
}
else{//退出程序
this.finish();
System.exit(0);
}
}
通過(guò) mBackKeyPressed? 來(lái)記錄是否有首次按返回鍵的記錄岳掐,如果不存在首次按鍵記錄伪嫁,則Toast提示,并記錄首次按鍵記錄西壮,并啟動(dòng)線程在2秒后擦除該按鍵記錄遗增。如果在線程海內(nèi)擦除mBackKeyPressed 時(shí)又按下返回鍵,則執(zhí)行else里面的語(yǔ)句退出程序款青。
2做修、通過(guò)計(jì)算時(shí)間差實(shí)現(xiàn)
private long mPressedTime = 0;
@Override
public void onBackPressed() {
long mNowTime = System.currentTimeMillis();//獲取第一次按鍵時(shí)間
if((mNowTime - mPressedTime) > 2000){//比較兩次按鍵時(shí)間差
Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show();
mPressedTime = mNowTime;
}
else{//退出程序
this.finish();
System.exit(0);
}
}
方法很多,當(dāng)然也可以用下面的方法,
3.//記錄用戶首次點(diǎn)擊返回鍵的時(shí)間
private longfirstTime =0;/**? ? *
?通過(guò)監(jiān)聽(tīng)keyUp? ? *@paramkeyCode? ? *@paramevent? ? *@return*/@OverridepublicbooleanonKeyUp(intkeyCode, KeyEvent event) {if(keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP) {longsecondTime = System.currentTimeMillis();if(secondTime - firstTime >2000) {
Toast.makeText(MainActivity.this,"再按一次退出程序", Toast.LENGTH_SHORT).show();
firstTime = secondTime;returntrue;
}else{
System.exit(0);
}
}returnsuper.onKeyUp(keyCode, event);
}
4.
? ? /* *@paramkeyCode? ? *@paramevent? ? *@return*/@OverridepublicbooleanonKeyDown(intkeyCode, KeyEvent event) {if(keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) {longsecondTime = System.currentTimeMillis();if(secondTime - firstTime >2000) {
Toast.makeText(MainActivity.this,"再按一次退出程序", Toast.LENGTH_SHORT).show();
firstTime = secondTime;returntrue;
}else{
System.exit(0);
}
}returnsuper.onKeyDown(keyCode, event);
}