针对网上流传的"Android 再按一次后退键退出应用程序"方法改正

Android中用户要退出应用程序,看到大部分退出应用程序的做法是:弹出一个对话框,用户点了确定后退出。个人觉得这用户体验有点不好,手指还要往屏幕中间移动再点击。用户按了一次后退键,这可能用户是误按了后退键,并不想直接退出程序,给用户提示”再按一次后退键退出应用程序“,如果用户真想退出,直接再按一次后退键即可退出整个应用程序。

网上有好多实现方法,看到大部分人博客转的方法如下:

Java代码 收藏代码
  1. privatestaticBooleanisExit=false;
  2. privatestaticBooleanhasTask=false;
  3. TimertExit=newTimer();
  4. TimerTasktask=newTimerTask(){
  5. @Override
  6. publicvoidrun(){
  7. isExit=false;
  8. hasTask=true;
  9. }
  10. };
  11. @Override
  12. publicbooleanonKeyDown(intkeyCode,KeyEventevent){
  13. if(keyCode==KeyEvent.KEYCODE_BACK){
  14. if(isExit==false){
  15. isExit=true;
  16. Toast.makeText(this,"再按一次后退键退出应用程序",Toast.LENGTH_SHORT).show();
  17. if(!hasTask){
  18. tExit.schedule(task,2000);
  19. }
  20. }else{
  21. finish();
  22. System.exit(0);
  23. }
  24. }
  25. returnfalse;
  26. }

看这逻辑,测试了下,如果用户第一次按了后退键,等2s再按一次后退键,再等2s再按一次后退键,第三次就直接退出了。看来这段代码只能实现用户第一次按后退键,2s之内再按后退键退出程序的功能而已。

我把它改了下:

Java代码 收藏代码
  1. privatestaticBooleanisExit=false;
  2. TimertExit=newTimer();
  3. MyTimerTasktask;
  4. classMyTimerTaskextendsTimerTask{
  5. @Override
  6. publicvoidrun(){
  7. isExit=false;
  8. }
  9. }
  10. @Override
  11. publicbooleanonKeyDown(intkeyCode,KeyEventevent){
  12. if(keyCode==KeyEvent.KEYCODE_BACK){
  13. if(isExit==false){
  14. isExit=true;
  15. Toast.makeText(this,"再按一次后退键退出应用程序",Toast.LENGTH_SHORT).show();
  16. if(task!=null)
  17. task.cancel();//将原任务从队列中移除
  18. task=newMyTimerTask();//新建一个任务
  19. tExit.schedule(task,2000);
  20. }else{
  21. finish();
  22. System.exit(0);
  23. }
  24. }
  25. returnfalse;
  26. }

以上经常测试,功能正常。

还有一种简便方法:

Java代码 收藏代码
  1. privatelongexitTime=0;
  2. @Override
  3. publicbooleanonKeyDown(intkeyCode,KeyEventevent){
  4. if(keyCode==KeyEvent.KEYCODE_BACK
  5. &&event.getAction()==KeyEvent.ACTION_DOWN){
  6. if((System.currentTimeMillis()-exitTime)>2000){
  7. Toast.makeText(getApplicationContext(),"再按一次后退键退出程序",Toast.LENGTH_SHORT).show();
  8. exitTime=System.currentTimeMillis();
  9. }else{
  10. //退出代码
  11. }
  12. returntrue;
  13. }
  14. returnsuper.onKeyDown(keyCode,event);
  15. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值