我希望在多个Android设备上同步动作。为此,我有一个telnet客户端,我可以向他们发送消息。
目前,我向设备发送了DoWork On 1397131360435
之类的消息。你可以注意到最后一个参数是时间戳。
在我的代码中,我计算给定参数之间的时差,并使用TimerTask
来调用我想要的方法。
但由于网络延迟的影响以及此命令到达设备的时间有点不同而导致设备之间的延迟时间为几毫秒,因此这并不能完全符合我的要求。
有没有办法可以等待特定的时间戳,然后运行我想要的方法?
目前我喜欢这个:
msDelay = Long.parseLong(args.get(2)) - System.currentTimeMillis();
//inside a listener
new java.util.Timer().schedule(
new java.util.TimerTask() {
@Override
public void run() {
mySyncMethod();
}
},
msDelay
);
所以我的意思是,我希望在时间戳为mySincMethod
时运行1397131360435
....而不仅仅是与本地System.currentTimeMillis()
的差异
答案 0 :(得分:3)
有不同的Timer.schedule
方法:
void schedule(TimerTask task, Date time)
Schedules the specified task for execution at the specified time.
void schedule(TimerTask task, long delay)
Schedules the specified task for execution after the specified delay.
您目前正在使用后者。要使其在指定时间工作,您应该使用前者,将毫秒转换为日期。
您可以将毫秒转换为日期,如下所示:
long millis = 123456780000;
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(millis);
Date date = calendar.getTime();
答案 1 :(得分:3)
有一种说法:一个有时钟的人知道时间;一个有两个时钟的男人永远不确定......
有很多问题可以同步到具有毫秒级别的设备:网络延迟,不同的设备日期,启动这些任务的设备的不同延迟......我建议使用Tim的方法,但首先