zoukankan      html  css  js  c++  java
  • 针对网上流传的 Android 再按一次后退键退出应用程序方法改正

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

    网上有好多实现方法,看到大部分人博客转的方法如下:
    private static Boolean isExit = false;
    private static Boolean hasTask = false;
    
    Timer tExit = new Timer();
    TimerTask task = new TimerTask() {
       
       public void run() {
           isExit = false;
           hasTask = true;
       }
    };
    
    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;
    }

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

    private static Boolean isExit = false;  
     
    Timer tExit = new Timer();  
    
    MyTimerTask  task;  
    class MyTimerTask  extends TimerTask{    
    
      public void run() {  
         isExit = false; 
      }  
    }      
     
    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(task!=null)  
                    task.cancel();                // 将原任务从队列中移除  
               task = new MyTimerTask();          // 新建一个任务        
                       tExit.schedule(task, 2000);  
            } else {  
                finish();
           System.exit(0);  
            }  
       }  
         return false;  
    }

    以上经过测试,功能正常,还有一种简便方法:

    private long exitTime = 0;  
     
    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 {  
               //退出代码  
           }  
           return true;  
       }  
       return super.onKeyDown(keyCode, event);  
    }
  • 相关阅读:
    ubuntu-虚拟机跟主机资源共享的实现方法
    git- 仓库创建、修改、提交、撤销
    theme- 工作原理
    makeMtk- user 版本编译
    Button- 自定义控件添加自定义属性
    actionMode
    screen-Orientation 横竖屏设置
    worktools-mmx 添加编译模块
    eclipse- MAT安装及使用
    worktools-monkey 测试工具的使用
  • 原文地址:https://www.cnblogs.com/sunzn/p/2875664.html
Copyright © 2011-2022 走看看