合理使用onKeyDown优化你的程序

前言:

Android开发者应该对onKeyDown这个方法不陌生,这个是Activity中监听用户操作物理按键时会进行回调,我们可以根据这个回调动作做你需要的一些处理,下边我会说告诉大家我程序中实际是如何处理onKeyDown事件的。

1、启屏页

启屏页中我们一般都会放一张推广图或者欢迎页等,然后做个延时,那么这个时候如果用户突然不小心按了返回键,那么这个Activity就直接销毁了,也就意味着程序就被kill掉了,但是对用户来说他以为他只是做了一个返回的操作,然后用户又去打开你的程序,发现居然是重启,emmm,体验极不舒适,不过没关系,只要做个处理就行了,在启屏页的那个Activity中屏蔽掉用户的返回键就可以了,具体如下:

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

可能有的同学发出疑问:我看好多APP启屏页也没做这个处理啊,当然,这个不是必须要处理的,还是要根据项目的实际需求来做取舍。

2、登录界面

在登录界面的时候我们按照一般页面交互逻辑,这个时候按下返回键一般就直接退出程序了,因为不管你是退出登录返回到登录界面还是从启屏页到登录界面,正常情况下我们都要finish掉其它Activity,所以这个我认为是很有必要做处理的,只需实现只在冷启动时显示启动页,即点击返回键与点击HOME键退出效果一致,具体如下:

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            Intent intent = new Intent(Intent.ACTION_MAIN);
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            intent.addCategory(Intent.CATEGORY_HOME);
            startActivity(intent);
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }

3、主页面

程序处在主页面的时候,再不做任何处理的情况下,按下返回键一般逻辑肯定是直接退出程序了,我们比较常见的APP处理方式大多都是在规定时间内按两次退出、或者按返回键给个Dialog询问是否确定退出,小编程序中使用的是第一种,也推荐第一种,因为不会降低用户对你程序的反感度,具体如下:

    private long exitTime;
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            if (System.currentTimeMillis() - exitTime > 2000) {
                Toast.makeText(MainActivity.this, "再按一次退出程序", Toast.LENGTH_SHORT).show();
                exitTime = System.currentTimeMillis();
            } else {
                MainActivity.this.finish();
            }
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }

你可能感兴趣的:(合理使用onKeyDown优化你的程序)