//退出标记
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。
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。