按两次返回退出应用的三种写法

来源:互联网 发布:易语言qq2015登录源码 编辑:程序博客网 时间:2024/05/17 02:10

方法1:(牛A与牛C之间写法)

// 是否退出程序private static Boolean isExit = false;// 定时触发器private static Timer tExit = null;
public boolean onKeyUp(int keyCode, KeyEvent event) {if (keyCode == KeyEvent.KEYCODE_BACK) {if (isExit == false) {isExit = true;if (tExit != null) {tExit.cancel(); // 将原任务从队列中移除}// 重新实例一个定时器tExit = new Timer();TimerTask task = new TimerTask() {@Overridepublic void run() {isExit = false;}};Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show();// 延时两秒触发task任务tExit.schedule(task, 2000);} else {finish();System.exit(0);}return true;}return super.onKeyUp(keyCode, event);}

原理:定义一个TimerTask定时器和一个是否退出程序的标识isExit,第一次按返回键,赋值isExit标识为true,开启定时器TimerTask 任务,两秒钟后赋值isExit标识为false,所以用户在这两秒中内再按一次返回键,则退出程序。否则定时器TimerTask任务执行,标志为false。原理就是这么简单~

方法2:(屌丝写法)

private long exitTime = 0;   @Override public boolean onKeyDown(int keyCode, KeyEvent event) {        if (keyCode == KeyEvent.KEYCODE_BACK) {            exit();            return false;        }        return super.onKeyDown(keyCode, event);    }    public void exit() {        if ((System.currentTimeMillis() - exitTime) > 2000) {            Toast.makeText(getApplicationContext(), "再按一次退出程序",                    Toast.LENGTH_SHORT).show();            exitTime = System.currentTimeMillis();        } else {            finish();            System.exit(0);        }    }

貌似说这种写法的效率最高~(o(╯□╰)o)

方法3:(高大上写法)

/**  * 菜单、返回键响应  */ @Override public boolean onKeyDown(int keyCode, KeyEvent event) {  // TODO Auto-generated method stub  if(keyCode == KeyEvent.KEYCODE_BACK)        {              exitBy2Click();  //调用双击退出函数        }  return false; } /**  * 双击退出函数  */ private static Boolean isExit = false; private void exitBy2Click() {  Timer tExit = null;  if (isExit == false) {   isExit = true; // 准备退出   Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show();   tExit = new Timer();   tExit.schedule(new TimerTask() {    @Override    public void run() {     isExit = false; // 取消退出    }   }, 2000); // 如果2秒钟内没有按下返回键,则启动定时器取消掉刚才执行的任务  } else {   finish();   System.exit(0);  } }
原理同方法一,只不过细节上有些差别而且写在了onKeyDown() 方法中。
所谓条条大路通罗马,总有一款代码写法适合你!


0 0