Android程序按两次退出

1、背景介绍

       在Android开发工程中,考虑到用户的手机是触屏的,可能会不小心点到了返回按钮,如果这个时候我们的程序直接退出了,是不是不太科学呢?对吧,因此我们要想个办法解决这个问题。我们常看见一些客户端,在中间弹出一个对话框,用户点击确定之后,就退出,取消就不退出(比如建行客户端)。实际上这样的效果体验不是太好,因为我们还要将手指移动到中间去。

       我们也常见一些其它手法,比如只是弹出一条提示信息,如果用户确实想退出,用户只需要在很短的时间内,再次点击退出,程序就会完全退出了。好了,我们来看看代码如何实现。


2、有Bug代码

       最开始的时候,本着不重复造轮子的想法,在网上收集了一下资料,看到如下的一段代码:

    private static Boolean isExit = false;
    private static Boolean hasTask = false;

    Timer tExit = new Timer();
    TimerTask task = new TimerTask() {
         
        @Override
        public void run() {
            isExit = false;
            hasTask = true;
        }
    };
     
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
       
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            if(isExit == false ) {
                isExit = true;
                Toast.makeText(this, "再按一次后退键退出应用程序", Toast.LENGTH_SHORT).show();
                if(!hasTask) {
                    tExit.schedule(task, 2000);
                }
            } else {
                finish();
                System.exit(0);
            }
        }
        return false;
    }
        在读完这段代码的时候,我有一个疑惑,这段代码在逻辑上好像还是有点问题。具体问题是什么呢?如果我们在一开始的时候,不小心点击了退出(本意不退出),那么我们只要不再点击退出就可以了。等我们下次想要退出的时候,依然还是要点击两次的。这是我们的需求。

        然而本段代码呢,当我们在错误的情况下点击了退出,额,下次点击退出的时候程序直接退出了。。。是不是不太科学呀!!!这样会在使用过程中,很糊涂的,有时候要点击两次,有时候只需要点击一次(就是又一次误点了)。


3、我的解答

       这里提供一个本人自己的解答方式,当然,也包含了网络上前人的一些智慧,嘿嘿,算是拿来主义了吧。

// 记录退出时间时候使用
	private long exitTime = 0;

	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		if (keyCode == KeyEvent.KEYCODE_BACK
				&& event.getAction() == KeyEvent.ACTION_DOWN) {
			if ((System.currentTimeMillis() - exitTime) > 2000) {
				Toast.makeText(getApplicationContext(), "再按一次后退键退出程序",
						Toast.LENGTH_SHORT).show();
				// 记录当前时间,如果是在两秒内
				exitTime = System.currentTimeMillis();
			} else {
				// 退出代码
				onDestroy();
			}
			return true;
		}
		return super.onKeyDown(keyCode, event);
	}


4、其它思路

        除了上面的一种解答方式之外,还有一种是第2、第3的结合体,主要是在使用定时器的时候做一个时间判断,倒计时两秒钟。如果在这两秒内用户点击了退出,程序退出;如果用户没有在这两秒内点击退出,那么要将上面的标识

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值