MainActivity.java中
// 定义全局静态变量,定时器1
public static ControlPollingTimer.MsgTimer timer_controlPolling_bj1 = new ControlPollingTimer.MsgTimer();
// 业务实现类
class TestFuncOnClickListener implements View.OnClickListener {
@Override
public void onClick(View view) {
// 其他业务逻辑
// ...
timer_controlPolling_bj1.startTimer(标志1, 延时时间delay);// 此处让delay=0,立即执行
}
}
ControlPollingTimer.java
public class ControlPollingTimer {
public static class MsgTimer {
int currentState = -1;
Timer myTimer = null;
public void handleTimeout() {
switch (currentState) {
case 标志1:
// 每隔30s检查一次,是否是CLOSED状态,如果不是,那么关闭小区,当小区关闭成功后,再次启动这个定时器
if (当前板卡1不是关闭状态) {
关闭板卡1;
Constant.StartTimerFlag_BJ1 = true; // 标志符设置为真
}
if(当前板卡1已经是关闭状态) {
发送让板卡1启动工作的命令;
MainActivity.timer_controlPolling_bj1.startTimer(标志1,延时时间delay);// 此处让delay=30,表示让板卡1先正常工作个30s,然后再重新启动这个流程
}
break;
default:
break;
}
}
public void startTimer(int currentState, int delay) {
this.currentState = currentState;
myTimer = new Timer();
MsgTimer.MyTimerTask task = new MsgTimer.MyTimerTask();
switch (currentState){
case ConstantData.TIMER_STATE_CONTROLPOLLING_BJ1:
myTimer.schedule(task, delay); // 每次调用StartTimer后延时delay秒后再执行handleTimeOut
break;
}
}
public void cancelTimer() {
if (myTimer != null) {
myTimer.cancel();
myTimer = null;
}
}
public class MyTimerTask extends TimerTask {
@Override
public void run() {
handleTimeout();
}
}
}
}
方法schedule(TimerTask task,long delay,long period)
该方法的作用是:
以执行schedule(TimerTask task,long delay,long period)方法当前的时间为参考时间,
在此时间基础上延迟指定的毫秒数(delay),
再以某一间隔时间无限次数地执行某一任务(period)。
public class Run {
static public class MyTask extends TimerTask {
@Override
public void run() {
System.out.println("运行了!时间为:" +new Date());
}
}
public static void main(String[] args) {
Timer timer = new Timer();
MyTask task = new MyTask();
System.out.println("当前时间:"+new Date().toString());
timer.schedule(task,3000,5000);
}
}
程序运行后的结果为:
当前时间:Fri May 19 08:16:04 CST 2017
运行了!时间为:Fri May 19 08:16:07 CST 2017
运行了!时间为:Fri May 19 08:16:12 CST 2017
运行了!时间为:Fri May 19 08:16:17 CST 2017
运行了!时间为:Fri May 19 08:16:22 CST 2017
运行了!时间为:Fri May 19 08:16:27 CST 2017
凡是使用方法中带有period参数的,都是无限循环执行TimerTask中的任务。