老套路看图:
每隔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();
}