Android实现点击两次返回键和长按返回键退出应用实践

虽然国庆节过了,玩的心还没回来。

今天给大家分享一篇关于退出应用的知识点。大家都知道在大部分App中,退出应用程序都是以点击两次返回键,并且控制连续点击的时间差,来提示用户,提高App的应用体验。

而长按返回键退出应用的场景目前国内App相对较少。本篇博客的内容我将带大家分别实现以上两种方式。

1.点击两次返回键退出应用

       点击两次返回键退出应用的核心在于控制用户点击的时间差,通过判断时间差来决定执行提示或者退出。既然是控制返回键,必然我们需要在onKeyDown的方法中来做处理。同时我们需要判断时间差,就需要记录此次点击的时间。

长按返回键的处理方式也有两种:

(1)重写onBackPressed方法

         相信大家都知道,当我们点击返回键的时候,系统其实是会去调用onBackPressed方法。并且系统允许我们自己定制该方法的处理方式。所以我们在onBackPressed方法中可以去做时间差的判断,来看核心代码:

    @Override
    public void onBackPressed() {
        //1.点击的时间差如果大于2000,则提示用户点击两次退出
        if(System.currentTimeMillis() - mExitTime > 2000) {
            //2.保存当前时间
            mExitTime  = System.currentTimeMillis();
            //3.提示
            showShortToast(R.string.str_exit_prompt);
        } else {
            //4.点击的时间差小于2000,调用父类onBackPressed方法执行退出。
            super.onBackPressed();
        }
    }

(2)重写onKeyDown

@Override

public boolean onKeyDown(int keyCode, KeyEvent event) {

    //1.点击返回键条件成立
    if(keyCode == KeyEvent.KEYCODE_BACK
            && event.getAction() == KeyEvent.ACTION_DOWN

            && event.getRepeatCount() == 0) {

        //2.点击的时间差如果大于2000,则提示用户点击两次退出
        if(System.currentTimeMillis() - mExitTime > 2000) {    

            //3.保存当前时间

            mExitTime  = System.currentTimeMillis();

            //4.提示

            showShortToast(R.string.str_exit_prompt);
        } else {

           //5.点击的时间差小于2000,退出。

           finish();
           System.exit(0);
        }
        return true;
    }
}


2.长按返回键退出应用

长按返回键的处理方式也有两种:

(1)在dispatchKeyEvent中处理

@Override
public boolean dispatchKeyEvent(KeyEvent event) {

    //点击返回键并且是长按,则退出
    if(event.getKeyCode() == KeyEvent.KEYCODE_BACK && event.isLongPress()) {
        System.exit(0);
        return true;
    }

    return false;
}

(2)在onKeyDown中处理

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {

    if(keyCode == KeyEvent.KEYCODE_BACK) {

        if(event.getRepeatCount() == 0) {

            showShortToast("长按返回键退出");

        } else {

            System.exit(0);
        }
    }
}

getRepeatCount()方法的作用是获取用户点击返回键的次数, 0代表点击了一次,次数>=1时就代表长按,值越大说明按的时间越长。

两种场景的退出方式,大家可以根据自己的实际情况选择。

有问题的小伙伴留言给我~


你可能感兴趣的:(Android)