【Android】定时器Timer的使用与注意点

本文介绍了如何在MainActivity.java中使用ControlPollingTimer类实现定时检查小区状态并控制板卡操作。通过实例展示了定时器的启动、延时执行和状态切换逻辑。周期性地检查小区是否关闭,并在必要时调整板卡工作模式。
摘要由CSDN通过智能技术生成

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中的任务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值