连续点击返回键退出Android 应用

问题

业务需要,在主界面连续点击返回键退出应用,记录一下。

解决方案

先说结论,在主界面Activity中添加如下代码

  /**
     * 记录上次点击返回键时间
     */
    private long lastClickTime = 0;

   /**
     * 两次回退点击时间间隔设置不小于2s
     */
    public static final long TIME_INTERVAL = 2000;

   ...
   ...
  
 @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            exitApp();
            return false;
        }
        return super.onKeyDown(keyCode, event);
    }

 /**
     * 应用退出
     */
  private void exitApp() {
        if (System.currentTimeMillis() - lastClickTime > TIME_INTERVAL) {
            //距离上次退出时间超过默认间隔时间,则认为不是连续点击,并记录新的点击时间
            Toast.makeText(this, "连续两次点击退出应用",Toast.LENGTH_SHORT).show();
            lastClickTime = System.currentTimeMillis();
        } else {
            this.finish();
            System.exit(0);
        }
    }
   ...
   ...
  
  • 1、 新增变量lastClickTime 记录上次点击返回键时间。
  • 2、 新增时间间隔常量 TIME_INTERVAL
  • 3、 在回调方法 onKeyDown 中监听每次点击返回键。
  • 4、 一旦点击返回键,且距离上次点击事件小于TIME_INTERVAL(这里设为两秒,实际可根据业务自行调整),则认为连续点击,退出应用。否则吐司弹窗提示,并记录最新点击时间。

混合开发应用的场景补充
  • 在某些混合开发的App中,主界面由WebView控件构成,则需要考虑在每次点击返回键时,判断是否存在可回退Web页面。
  • 如果有可回退Web页面,先回退网页,再判断是否连续点击退出应用。

代码如下:

@Override
  public boolean onKeyDown(int keyCode, KeyEvent event) {
      // 是否可以回退网页
      if (keyCode == KeyEvent.KEYCODE_BACK) {
          if (webView.canGoBack()) {
              webView.goBack();
              return true;
          } else {
              exitApp();
              return false;
          }
      }
      return super.onKeyDown(keyCode, event);
  }

猜你喜欢

转载自blog.csdn.net/qq_22255311/article/details/129390725