首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

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

2012-07-28 
针对网上流传的Android 再按一次后退键退出应用程序方法改正? ? ? Android中用户要退出应用程序,看到大

针对网上流传的"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;@Overridepublic 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);}
1 楼 istend 2012-05-15   赞个,  虽然还没测试,我刚发现  这种推出方法   呵呵

热点排行