博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android实现 再按一次退出 的三种方法 durationTime、timerTask 和Handler
阅读量:7281 次
发布时间:2019-06-30

本文共 2872 字,大约阅读时间需要 9 分钟。

目前很多Android应用都会实现按返回键时提示“再按一次推退出”在这篇文章中总结了各家的方法,一般都是监听Activity的onKeyDown 或者onBackPressed方法方法一:直接计算时间差来实现。[java] view plaincopyfinal int mDuraction = 2000; // 两次返回键之间的时间差  long mLastTime = 0; // 最后一次按back键的时刻    @Override  public boolean onKeyDown(int keyCode, KeyEvent event) {      if(keyCode == KeyEvent.KEYCODE_BACK) {
// 截获back事件 exitApp(); return true; } else { return super.onKeyDown(keyCode, event); } } private void exitApp() { if(System.currentTimeMillis() - mLastTime > mDuraction) { Toast.makeText(this, "再按一次退出", 0).show(); mLastTime = System.currentTimeMillis(); } else { finish(); } } 方法二:通过Timer定时器来实现按两次退出。[java] view plaincopyfinal int mDuraction = 2000; // 两次返回键之间的时间差 private boolean isExit = false; private Timer mTicker = null; @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode == KeyEvent.KEYCODE_BACK) {
// 截获back事件 exitByTimeTicker(); return true; } else { return super.onKeyDown(keyCode, event); } } private void exitByTimeTicker() { if(isExit) { // 退出应用 finish(); } else { // 第一次按back键,弹出提示 Toast.makeText(getApplicationContext(), "再按一次退出", 0).show(); isExit = !isExit; if(null == mTicker) { mTicker = new Timer(); } mTicker.schedule(new TimerTask() { @Override public void run() { isExit = false; // 改变标识 } }, mDuraction); // 如果第一次按back 2秒后没操作,则使用计时器取消退出操作的标识 } } 方法三: 通过Handler机制,判断EXIT_WAIT消息是否存在消息队列中来判断是否是第二次点击Back键[java] view plaincopyfinal int mDuraction = 2000; // 两次返回键之间的时间差 private final int MSG_EXIT = 0x0808; private final int MSG_EXIT_WAIT = 0x0810; @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode == KeyEvent.KEYCODE_BACK) {
// 截获back事件 mHandler.sendEmptyMessage(MSG_EXIT); return true; } else { return super.onKeyDown(keyCode, event); } } private Handler mHandler = new Handler(){ public void handleMessage(Message msg) { switch (msg.what) { case MSG_EXIT: if(this.hasMessages(MSG_EXIT_WAIT)) { // 如果MSG_EXIT_WAIT 还存在MessageQueue中,说明已经按了一次Back键,那么就finish当前activity finish(); } else { Toast.makeText(getApplicationContext(), "再按一次退出", 0).show(); this.sendEmptyMessageDelayed(MSG_EXIT_WAIT, mDuraction); } break; case MSG_EXIT_WAIT: break; default: break; } }; };

 

转载地址:http://iqzjm.baihongyu.com/

你可能感兴趣的文章
Proguard 案例
查看>>
python 操作windows下目录的相关函数
查看>>
Ubuntu14.04修改IP地址
查看>>
httpd详解
查看>>
ansible(七)Conditionals 和 loops,自定义loops插件
查看>>
Spring 中优雅的获取泛型信息
查看>>
Haproxy 配置详细讲解
查看>>
zabbix 监控 TCP 连接数
查看>>
Python 学习资源汇总
查看>>
zabbix3.4.4集成graphtrees图文笔记
查看>>
Android中的管理工具类log可以这么些.....
查看>>
CentOS上Broadcom无线网卡驱动安装
查看>>
寻找系统参与者的15个问题
查看>>
工厂模式
查看>>
78.LAMP架构介绍,MYSQL和MariaDB介绍,MYSQL安装
查看>>
SSL *** Reconnect
查看>>
2014-02-27 连贯操作(没带U盘。本文当笔记用,明天改
查看>>
Docker修改默认的网段
查看>>
694 - The Collatz Sequence
查看>>
Centos7.5-重定向和文件的查找
查看>>