Android应用之定时任务
一、引言
车机地图应用需要以固定的频率接收汽车速度信息,车速由MCU从CAN总线周期上报获取,然后通过内部协议到Android应用层,需要java应用执行定时任务,每100ms同步一次当前速度给地图,执行一段时间要求不能丢帧。
二、分析实现
- 最初采用Handler.postDelayed(Runnable r, long delayMillis)的方式实现,发现丢帧率较高,无法满足要求。
- 尝试使用Time.schedule(TimerTask task, long delay)的方式实现,丢帧率比Handler实现要好,但还是发现task的运行时间会被计算在内,结束后再过delay时间执行下次task,这样执行一段时间依然存在丢帧的情况。
- 查看Time.scheduleAtFixedRate(TimerTask task, long delay, long period)的注释,会考虑task的运行时间,将运行时间排除在外,尽量以固定频率执行task,故满足此需求,使用该方式实现,加日志及给到地图验收均可满足。
public class MyService {
private