Android开发之实现每隔一段时间触发定时器android定时器

老套路看图:

每隔20秒重新触发

实际上实现也很简单我们可以通过android原生自带的定时器完成,说下思路:

1.首先实现android定时器开启触发

2.在定时器结束的方法中再次触发开启定时器即可

package com.wyze.mercury.common.utils;

import android.os.CountDownTimer;

import com.wyze.mercury.common.TimerListener;
import com.wyze.platformkit.utils.log.WpkLogUtil;

/**
 * @author : xiayiye5
 * @date : 2021/1/8 18:10
 * 类描述 : Android定时器每隔一段时间刷新灯的状态
 */
public class CountDownTimerUtils {

    private CountDownTimer countDownTimer;

    private CountDownTimerUtils() {
    }

    public static CountDownTimerUtils getInstance() {
        return Single.COUNT_DOWN_TIMER_UTILS;
    }

    public CountDownTimerUtils setTime(final TimerListener timerListener) {
        if (null == countDownTimer) {
            countDownTimer = new CountDownTimer(20 * 1000L, 1000) {
                @Override
                public void onTick(long l) {
                    WpkLogUtil.e("定时器", l / 1000 + "");
                }

                @Override
                public void onFinish() {
                    WpkLogUtil.e("定时器", Thread.currentThread().getName());
                    //执行获取灯的状态
                    timerListener.timeFinish();
                    //继续定时
                    countDownTimer.start();
                }
            };
        }
        return this;
    }

    private static final class Single {
        private static final CountDownTimerUtils COUNT_DOWN_TIMER_UTILS = new CountDownTimerUtils();
    }

    /**
     * 开始定时
     */
    public void startTime() {
        if (null != countDownTimer) {
            countDownTimer.start();
        }
    }

    /**
     * 取消定时
     */
    public void cancelTime() {
        if (null != countDownTimer) {
            countDownTimer.cancel();
            //切记置空
            countDownTimer = null;
        }
    }
}

注意:一定要做好生命周期的管理如下,个人建议开启定时器方法放到onStart生命周期中调用

  @Override
    protected void onStart() {
        super.onStart();
        CountDownTimerUtils.getInstance().setTime(new TimerListener() {
            @Override
            public void timeFinish() {
                //每隔一段时间刷新灯的状态
                getIotProp();
            }
        }).startTime();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        //销毁的时候一定要取消定时器避免内存泄漏
        CountDownTimerUtils.getInstance().cancelTime();
    }

    @Override
    protected void onPause() {
        super.onPause();
        CountDownTimerUtils.getInstance().cancelTime();
    }

在看下回调接口

package com.wyze.mercury.listener;

/**
 * @author : xiayiye5
 * @date : 2021/1/8 15:17
 * 类描述 :
 */
public interface TimerListener {
    /**
     * 定时完成
     */
    void timeFinish();
}

猜你喜欢

转载自blog.csdn.net/xiayiye5/article/details/112462435