private static Boolean hasTask = false;
private static final int TIMER_DELAY_TIME=2000;
Timer mExit = new Timer();
TimerTask task=null;
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
if(!isExit ) {
isExit = true;
Toast.makeText(this, "再按一次退出应用程序", Toast.LENGTH_SHORT).show();
if(!hasTask) {
hasTask=true;
if(task!=null){
task.cancel();
}
task = new TimerTask() {
@Override
public void run() {
isExit = false;
hasTask = false;
}
};
mExit.schedule(task, TIMER_DELAY_TIME);
}
} else {
AppAplication.newInstance().exit();
}
}
return true;
}
代码二:
android连续按两次返回退出程序(完整代码)
UserHelper
package com.hk.icie;
public class UserHelper {
private static Boolean isExit = false;
public static Boolean getIsExit() {
return isExit;
}
public static void setIsExit(Boolean isExit) {
UserHelper.isExit = isExit;
}
}
ExitTimerTask
package com.hk.utils;
import java.util.TimerTask;
import com.hk.icie.UserHelper;
public class ExitTimerTask extends TimerTask {
@Override
public void run() {
UserHelper.setIsExit(false);
}
}
Tab1Activity
// 此部分为了实现按两下返回退出
private Timer tExit = new Timer();
private ExitTimerTask exitTimerTask = new ExitTimerTask();
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
if (!UserHelper.getIsExit()) {
UserHelper.setIsExit(true);
AlertUtils.ToastAlert(Tab1Activity.this, R.string.alert_exit);
if (tExit != null) {
if (exitTimerTask != null) {
// 将原任务从队列中移除(必须的,否则报错)
exitTimerTask.cancel();
}
// 新建一个任务
exitTimerTask = new ExitTimerTask();
tExit.schedule(exitTimerTask, 2*1000);
}
}
else {
UserHelper.setIsExit(false);
finish();
System.exit(0);
}
}
return true;
}
需要注意的是
每次放定时任务前,确保之前任务已从定时器队列中移除,每次放任务都要新建一个对象,否则出现一下错误:ERROR/AndroidRuntime(11761): java.lang.IllegalStateException: TimerTask is scheduled already,同一个定时器任务只能被放置一次。