首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在两个设备上几乎同时执行代码?

如何在两个设备上几乎同时执行代码?
EN

Stack Overflow用户
提问于 2014-08-17 10:12:46
回答 2查看 96关注 0票数 2

我试着在两个设备上同时播放一种蜂鸣音(两者之间最大的50毫秒差)。到目前为止,我所做的是通过SNTP获取网络时间,然后使用handler.postDelayed(runnable, difference of network time and phone time + delay)来执行可运行的,但这似乎只在有时和其他情况下起作用,设备发出的声音相差高达3-4秒。

简而言之,这里是这样的场景:我们有两个设备,我们希望它们每10秒一起播放一次蜂鸣声。

有什么更好的方法来做我不知道的事吗?

EN

回答 2

Stack Overflow用户

发布于 2014-08-17 10:59:57

我试着在两个设备上同时播放一种蜂鸣音(两者之间最大的50毫秒差)。

引用谷歌的斯科特·巴塔( Scott )在他的answer to a suspiciously similar question上的话

我不知道你的总体目标是什么,但不要把你的希望提高到能够在太紧的容忍范围内同时实现--很多事情都在和你作对。Android并不是作为一个实时操作系统设计的,即使在诸如实时音频这样的延迟很重要的地方,它也要迎头赶上。操作系统可能不会给您进程所需的调度延迟,而且Android上的Java可能会有点不可预测,除非您非常小心地分配内存等(在错误的时间进行垃圾收集,并且所有东西都超出了窗口)。如果有其他事情发生,您的流程可能在任何时候都会出现颠簸。即使您在开始时的NTP同步也可能有点麻烦,特别是当您正在通过移动网络连接而不是WiFi进行同步时(尽管如此,我不知道协议在处理这个问题上有多好)。让东西在半秒钟内完成应该是可行的,也许,我认为,把东西控制在小于10毫秒是非常困难的,而介于两者之间的be...somewhere可能会非常困难。

我鼓励你重新考虑这一做法。如果这两台设备的距离足够近,可以听到它们的嘟嘟声,那么这些设备就可以通过蓝牙或WiFiDirect连接起来。让一个设备作为主设备。它将一个信号发送到另一个设备,以指示何时播放声音,从接收到信号时起以毫秒为单位进行偏移。现在你只有一只钟。通过实验,您可以确定一个“模糊因素”来处理发送消息的延迟。

然后使用handler.postDelayed(可运行、网络时间差和电话时间+延迟)来执行可运行的

postDelayed()不是为精确的计时而设计的,而且postDelayed()专门将您与主应用程序线程联系在一起。音频回放API通常在后台线程上很好地工作。因此,我会使用ScheduledExecutorService

票数 3
EN

Stack Overflow用户

发布于 2014-08-17 11:30:20

假设

这两个设备同时达到分钟滴答。

步骤:

  1. 让其中一个设备来领导这一过程。
  2. 获取另一个设备上的当前时间。(让另一个设备在分钟滴答时作出响应)。
  3. 给另一个设备建议一个时间(例如。19:34夏普)考虑安全的窗口,以确认建议的时间味精。会在其他设备通过之前接收到。
  4. 执行失败机制。Asume认为发送到另一个设备的时间已经过去了。设备将向通知故障的第一设备发送故障消息。第一个已经开始嗡嗡叫的设备。蜂鸣过程将取消在该设备和步骤再次启动。
  5. 否则,继续每10秒播放一次声音。成功。

基于这样的假设,这将从第一次开始工作。只有当连接太慢,使得通信几乎需要1分钟或更短的时间时,故障机制才能正常工作。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25348241

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档