专栏首页贺利权Android 双击返回键退出程序的3种写法~

Android 双击返回键退出程序的3种写法~

LZ-Says: 去年真的浪费了好多的机会,,,而今年,却找不到一个合适的机会,,,还是自己能力有所欠缺啊。。。从一点点开始积累吧。。。那个谁,,,这次,我会很自信站在你面前!!!


记得去年曾经让LZ写一个连续点击返回键俩次退出程序,,,憋了好久没憋出来。。。23333。。。

下面先说说LZ思路,具体如下:

1. 第一种就是根据用户点击俩次的时间间隔去判断是否退出程序;

2. 第二种就是使用android中计时器(**Timer**)。

其实这俩种都差不多.思路是有了,,,接下来要怎么开搞呢???用户点击肯定会触发相应的事件,,,我们先来看下面俩个事件的作用。。。

Activity.onKeyDown(): 当某个键被按下时会触发,但不会被任何的该Activity内的任何view处理。 默认按下KEYCODE_BACK键后会回到上一个Activity;

Activity.onKeyUp(): 当某个按键被按下,松开后触发,但不会被任何的该Activity内的任何view处理。 默认没有执行任何操作,只是简单的给一个false作为返回值。So,,,接下来分别使用如上俩个方法干掉这个当年的拦路虎


1. One Way:onKeyUp()

//记录用户首次点击返回键的时间

private long firstTime=0;

@Override

public boolean onKeyUp(int keyCode, KeyEvent event) {

switch (keyCode){

case KeyEvent.KEYCODE_BACK:

long secondTime=System.currentTimeMillis();

if(secondTime-firstTime>2000){

Toast.makeText(MainActivity.this,"再按一次退出程序--->onKeyUp",Toast.LENGTH_SHORT).show();

firstTime=secondTime;

return true;

}else{

System.exit(0);

}

break;

}

return super.onKeyUp(keyCode, event);

}

2. Two Way:onKeyDown()

//记录用户首次点击返回键的时间

private long firstTime=0;

@Override

public boolean onKeyDown(int keyCode, KeyEvent event) {

if(keyCode==KeyEvent.KEYCODE_BACK && event.getAction()==KeyEvent.ACTION_DOWN){

if (System.currentTimeMillis()-firstTime>2000){

Toast.makeText(MainActivity.this,"再按一次退出程序--->onKeyDown",Toast.LENGTH_SHORT).show();

firstTime=System.currentTimeMillis();

}else{

finish();

System.exit(0);

}

return true;

}

return super.onKeyDown(keyCode, event);

}

3. Three Way:Timer

@Override

public boolean onKeyDown(int keyCode, KeyEvent event) {

if(keyCode==KeyEvent.KEYCODE_BACK){

exitByDoubleClick();

}

return false;

}

private void exitByDoubleClick() {

Timer tExit=null;

if(!isExit){

isExit=true;

Toast.makeText(MainActivity.this,"再按一次退出程序--->Timer",Toast.LENGTH_SHORT).show();

tExit=new Timer();

tExit.schedule(new TimerTask() {

@Override

public void run() {

isExit=false;//取消退出

}

},2000);// 如果2秒钟内没有按下返回键,则启动定时器取消掉刚才执行的任务

}else{

finish();

System.exit(0);

}

}


OK,,,LZ介绍完三种写法,,,有好一点的写法可以告诉我哦~

2017年7月6日00:14:59更新:听到一个哥儿们提供了一种思路,大家有兴趣可以实践下:

重写onkeydown 在里面利用handle的延时发送来实现

showToast(“确定要退出?xxx欢迎您下次再来”);

// 利用handler延迟发送更改状态信息

handler.sendEmptyMessageDelayed(0, 2000);

本文分享自微信公众号 - 贺利权(hlq_struggle),作者:HLQ_Struggle

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-10-24

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • (基础篇)Git 提交项目到 Coding,Let's go~

    Enmmm,本篇,我们将一起进行 Git 实战,尽量模拟真实工作开发环境,一起来吧~

    HLQ_Struggle
  • 新奇篇 之 Mac 配置 React Native 0.56

    据说后期的项目会涉及到 React Native,今天在等待导入依赖的期间,简单配置了一波,特此做个记录。

    HLQ_Struggle
  • 初涉静态调试 - 修改Smali

    Enmmm,还记得之前看反编译之后的结果,对于 Smali 文件,简直懵的要死。

    HLQ_Struggle
  • System.out.println与System.err.println的区别

    System.out.println能重定向到别的输出流,这样的话你在屏幕上将看不到打印的东西了, 而System.err.println只能在屏幕上实现打印,...

    Dunizb
  • 用React开发SAP Fiori应用

    介绍了SAP Fiori是如何一步步走向开放的。在Fiori Fundamentals和SAP UI5 Web Component诞生之前,SAP UI5是开发...

    Jerry Wang
  • 看汉得如何回应SAP的这次“封杀”?

    昨天T客报道了《SAP取消汉得合作伙伴资格是“得”还是“失”?》,引起了业内同行们的广泛关注,有人说SAP封杀汉得也不是第一次了,在与Oralce竞争的时候,S...

    人称T客
  • [C#]C++与C#数据类型总结

    原文链接:http://blog.csdn.net/humanking7/article/details/50981922

    祥知道
  • 员工Emp表的增删改查实现!本实验室目的是为了了解模板页的好处!

    细节;id 还是 i -----------------------;;半个笑死

    静心物语313
  • 大学毕业时成都SAP和深圳腾讯的Offer,我是怎么选择的

    2006年校园招聘,我拿到了SAP成都研究院和深圳腾讯的offer,而我最后选择了前者。

    Jerry Wang
  • ADO.NET Entity Framework CodeFirst 如何输出日志(EF 5.0)

    ADO.NET Entity Framework CodeFirst 如何输出日志(EF4.3) 用的EFProviderWrappers ,这个组件好久没有更...

    张善友

扫码关注云+社区

领取腾讯云代金券