android 再按一次后退键退出应用程序
//退出标记 private static Boolean isExit = false; Timer tExit = new Timer(); TimerTask task = new TimerTask() { @Override public void run() { isExit = false; } }; //重写按下“后退”键时所做的操作 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { System.out.println("TabHost_Index.java onKeyDown"); if (keyCode == KeyEvent.KEYCODE_BACK) { if (isExit == false) { isExit = true; Toast.makeText(this, "再按一次后退键退出应用程序", Toast.LENGTH_SHORT).show(); // 定义计划任务,根据参数的不同可以完成以下种类的工作: // 在固定时间执行某任务,在固定时间开始重复执行某任务,重复时间间隔可控,在延迟多久后执行某任务,在延迟多久后重复执行某任务,重复时间间隔可控 task = null; task = new TimerTask(){ @Override public void run() { isExit = false; } }; tExit.schedule(task, 2000); } else { finish(); System.exit(0); } } return true; }
解释:
1.tExit.schedule(task, 2000); 这是说:2秒后,执行这个TimerTask,不过只执行一次。
2.task = null; 设置为null,因为如果不设置为null,直接调用 tExit.schedule(task, 2000);会抛出异常:java.lang.IllegalStateException: TimerTask is scheduled already。
*************************************************************************************************************
public class BackActivity extends Activity { private static final String TAG = "BackActivity"; private long mLastBackTime = 0; private long TIME_DIFF = 2 * 1000; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { long now = new Date().getTime(); if (now - mLastBackTime < TIME_DIFF) { Log.d(TAG, "back, finish"); return super.onKeyDown(keyCode, event); } else { Log.d(TAG, "after 2s, toast"); mLastBackTime = now; Toast.makeText(this, "再点一次将推出", 2000).show(); } return true; } return super.onKeyDown(keyCode, event); } }
*************************************************************************************************************
先在Activity中定义一个成员变量 private long firstBackKeyDown; @Override //重写键盘按键分发事件,因为我是在TabActivity中写的Demo。如果是Acitivity中则直接重写OnKeyDown即可,具体区别请Google... public boolean dispatchKeyEvent(KeyEvent event) { if(event.getAction() == KeyEvent.ACTION_DOWN && event.getKeyCode() == KeyEvent.KEYCODE_BACK){ return exitApplication(); } return super.dispatchKeyEvent(event); } private boolean exitApplication() { if(firstBackKeyDown == 0 ? true : false){ firstBackKeyDown = System.currentTimeMillis(); Toast.makeText(mContext, "2秒内再次点击可退出~", Toast.LENGTH_SHORT).show(); return true; }else{ if(System.currentTimeMillis() - firstBackKeyDown <= 2000 ? true : false){ mActivity.finish(); return true; }else{ firstBackKeyDown = 0; exitApplication(); return true; } } }

浙公网安备 33010602011771号