`
ldl8818
  • 浏览: 124338 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

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

阅读更多

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

 

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

 

    private static Boolean isExit = false;
    private static Boolean hasTask = false;

    Timer tExit = new Timer();
    TimerTask task = new TimerTask() {
         
        @Override
        public void run() {
            isExit = false;
            hasTask = true;
        }
    };
     
    @Override
    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{  
	@Override
  	public void run() {
   		isExit = false;

  	} 
    }    

   @Override
    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;

	@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(getApplicationContext(), "再按一次后退键退出程序", Toast.LENGTH_SHORT).show();
		        exitTime = System.currentTimeMillis();
			} else {
				//退出代码
			}
		    return true;
	    }
		return super.onKeyDown(keyCode, event);
	}	
2
0
分享到:
评论
2 楼 q271281401 2012-07-02  
楼主,这个代码是不是应该放应用程序的主activity?
1 楼 istend 2012-05-15  
赞个,  虽然还没测试,我刚发现  这种推出方法   呵呵

相关推荐

Global site tag (gtag.js) - Google Analytics