记一次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

建议用时间差的方式来实现这个功能,由于代码的简单与稳定性都比线程延时相对好不少。
相关文章
相关标签/搜索