我正在开发一个小而简单的应用,其中一个Android设备通过网络向另一个Android设备发送一条小消息。 Android不会让我在主线程上做网络任务,所以我使用了AsyncTask。功能如下:
在Device1上按下按钮时,会创建并执行AsyncTask。 ASyncTask向UDP发送带有UDP的“ping”消息。 Device2在while(true)循环中运行,一旦收到“ping”消息,它就会发送一个“pong”。 Device1正在等待此“pong”消息。
从Device1发送“ping”的那一刻开始计算时间,直到收到“pong”。如果按下按钮多次,每个乒乓的延迟会急剧下降到2-5ms,但第一次乒乓可能会有60-350ms之间的延迟。如果按钮未按下一段时间然后再按下,则典型的延迟也在60-350ms之间。
有没有人可以解释这种行为?有没有办法始终实现低延迟(~5ms)?
提前谢谢大家!
答案 0 :(得分:0)
似乎Android在没有流量时会关闭WiFi - 请参阅此处的分析和解决方案:Force android to send UDP packets immediately?。基本上,您需要不时发送保持活动数据包(如100毫秒)。