Android onBackPressed不执行的解决方案

应用中经常会用到双击返回键在退出应用的效果,目的是为了防止用户误触返回键而导致退出应用。
通常的写法如下:
首先定义一个变量

   /**
     * 再次返回键退出程序
     */
    private long lastBack = 0;

然后我们重写onBackPressed

  @Override
    public void onBackPressed() {
        if (lastBack == 0 || System.currentTimeMillis() - lastBack > 2000) {
            Toast.makeText(getApplicationContext(), "再按一次返回退出程序", Toast.LENGTH_SHORT).show();
            lastBack = System.currentTimeMillis();
            return;
        }
        super.onBackPressed();
    }

首先我们获取当前的变量lastBack,然后给它赋值,然后检测是否大于两秒,如果大于则弹出提示“再按一次的返回退出程序”,当两次间隔小于两秒那么就会走super

onBackPressed()在Activity.class里实现:

    public void onBackPressed() {
        finish();
    }

super.onBackPressed()是执行系统的默认动作,就是退出当前activity,所以这样就实现了退出应用的功能。
但是有些时候不执行onBackPressed(),那怎么解决呢

我采用的是重写dispatchKeyEvent代码如下:

  @Override
    public boolean dispatchKeyEvent(KeyEvent event)
    {
        if (event.getKeyCode() == KeyEvent.KEYCODE_BACK &&  event.getAction()==KeyEvent.ACTION_DOWN){
            //自己的操作
            if (lastBack == 0 || System.currentTimeMillis() - lastBack > 2000) {
                Toast.makeText(getApplicationContext(), "再按一次返回退出程序", Toast.LENGTH_SHORT).show();
                lastBack = System.currentTimeMillis();

            }else {
                finish();
            }
            return false;
        }
        return super.dispatchKeyEvent(event);
    }

采用此方法,解决了不响应onBackPressed的问题,至于原因可能是因为dispatchKeyEvent只是监控案件不管是activity还是activitygroup都会触发而onBackPressed是在activity才触发。

你可能感兴趣的:(Android onBackPressed不执行的解决方案)