雙擊退出(再按一次退出)應用
# 簡介
在開發中經常需要的一個需求就是退出應用程式,那麼現在一般就是兩種情況,一、主要是點選返回鍵,彈出提示框,是否退出應用,如:UC瀏覽器,獵豹瀏覽器等,二、主要是在一定的時間間隔之內雙擊,便可退出應用。一般主要寫在BaseActivity(父類)裡面
我們今天主要做的就是第二種方式退出應用。 當然了,這種方式有許多種方式
# 程式碼分析
## 1、直接使用System.currentTimeMillis() 方式進行判斷
> 程式碼如下
<1>重寫onKeyDown()方法
``` private long exitTime = 0;
@Override public boolean onKeyDown(int keyCode, KeyEvent event) { /*判斷使用者是否點選了“返回鍵”*/ if (keyCode == KeyEvent.KEYCODE_BACK)
{ if ((System.currentTimeMillis() - exitTime) > 2000) { Toast.makeText(this, "再按一次退出程式", Toast.LENGTH_SHORT).show(); exitTime = System.currentTimeMillis(); } else { finishAll(); System.exit(0); Process.killProcess(Process.myPid()); } return true; } return super.onKeyDown(keyCode, event); }
``` ## 2、使用定時器Timer進行判斷時間間隔 > 程式碼如下:
<2>重寫onKeyDown()方法
```
@Override public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode==KeyEvent.KEYCODE_BACK){ exitAPP(); } return false; } private boolean isExitApp; private void exitAPP() { Timer timer = null; if (!isExitApp) { isExitApp = true; Toast.makeText(this, "再按一次退出程式", Toast.LENGTH_SHORT).show(); timer = new Timer(); timer.schedule(new TimerTask() { @Override public void run() { isExitApp = false;//取消退出 } }, 2000);// 如果2秒鐘內沒有按下返回鍵,則啟動定時器取消掉剛才執行的任務 } else { finishAll(); System.exit(0); Process.killProcess(Process.myPid()); } }
//新增的父類退出時finish全部 public static void finishAll() { List<BaseActivity> copy; synchronized (mActivities) { copy = new ArrayList<BaseActivity>(mActivities); } for (BaseActivity activity : copy) { activity.finish(); } }
```
>3、這兩種情況都滿足退出應用的需要。好了這裡就是記錄一下,給自己補充一下知識點。
# 總結