我的极客虫blog

The only easy day was yesterday.

  • 首页
  • 归档

  • 搜索
RxJava 内存 GreenDAO Tools Mac 设计模式 Gradle Java Life Android Studio WebView SDK Service 规范 Android

Android中的“再按一次返回键退出程序”的改进

发表于 2016-11-19 | 分类于 术.解决方案 | 0 | 阅读次数 111

最近在优化公司项目的代码,发现以前的坑很多,我慢慢地在填,今天就发现了一个坑,就是首页的“再按一次返回键退出程序“功能,所以这个坑,我就填了。

首先,项目里的版本代码是这样的:

private static boolean isExit = false;

Handler mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            isExit = false;
        }
    };
    
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            exit();
            return false;
        }
        return super.onKeyDown(keyCode, event);
    }

private void exit() {
        if (!isExit) {
            isExit = true;
            Toast.makeText(MainActivity.this, "再按一次退出程序", Toast.LENGTH_SHORT).show();
            mHandler.sendEmptyMessageDelayed(0, 2000);
        } else {
            finish();
            System.exit(0);
        }
    }

这是一种很扯淡的写法,而且用handler有内存泄漏的风险,而且代码也不精简,所以我就填了这个坑。

经过修改直接写个简洁版的:

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(MainActivity.this, "再按一次退出程序", Toast.LENGTH_SHORT).show();
                exitTime = System.currentTimeMillis();
            } else {
                finish();
                System.exit(0);
            }
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }

经过修改后,代码精简易懂。

如果这篇文章对您有很大帮助,你可以扫描下面的二维码,让我喝一杯咖啡。非常感谢您的捐赠。谢谢!
F1ReKing 微信支付

微信支付

F1ReKing 支付宝

支付宝

  • 本文作者: F1ReKing
  • 本文链接: https://geekbug.xyz/archives/2019120223144775080
  • 版权声明: 本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0 许可协议。转载请注明出处!
# RxJava # 内存 # GreenDAO # Tools # Mac # 设计模式 # Gradle # Java # Life # Android Studio # WebView # SDK # Service # 规范 # Android
Java中String、StringBuffer及StringBuilder的区别
Android之Service
  • 文章目录
  • 站点概览
F1ReKing

F1ReKing

34 日志
8 分类
15 标签
RSS
Github E-mail Twitter
Creative Commons
Links
  • Android开发者
0%
© 2014 — 2021 F1ReKing
The only easy day was yesterday.
闽ICP备20002060号