众多的安卓应用在退出时都用到了在指时间内连续点击2次返回键,退出应用。在搜罗了一些资料后,收集了一些实用靠谱的方法。
一.
在一个配置类Config中记录记录是否有首次按键
public static boolean hasFirBackPressed= false;
@Override
public void onBackPressed() {
if(!Config.hasFirBackPressed){
Toast.makeText(this, “再按一次退出程序”, Toast.LENGTH_SHORT).show();
Config.hasFirBackPressed= true;
new Timer().schedule(new TimerTask() {//延时两秒,如果超出则擦错第一次按键记录
@Override
public void run() {
Config.hasFirBackPressed= false;
}
}, 2000);
}else{
finish();
//执行安全退出的代码
……..
}
}
通过 hasFirBackPressed来记录是否有首次按返回键的记录,如果不存在首次按键记录,则Toast提示,并记录首次按键记录,并启动线程在2秒后擦除该按键记录。如果在2秒内又按下返回键,则执行else里面的语句退出程序。
二.
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的语句退出程序。
三.
public class MainActivity extends Activity {
private Toast toast;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
toast = Toast.makeText(getApplicationContext(), "确定退出?", 0);
}
public void onBackPressed() {
quitToast();
}
private void quitToast() {
if(null == toast.getView().getParent()){
toast.show();
}else{
System.exit(0);
}
}
}