首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android onBackPressed不执行的解决方案

Android onBackPressed不执行的解决方案

作者头像
longzeqiu
发布2019-08-14 10:11:39
3K0
发布2019-08-14 10:11:39
举报
文章被收录于专栏:Android小知识Android小知识

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

   /**
     * 再次返回键退出程序
     */
    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才触发。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.05.13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档