我有三台安卓设备:一台三星 Galaxy Note 10、一台 HTC Desire C 和一台索尼 Xperia E。此外,我有一个服务可以监听这些设备上的特定 TCP 端口。我所有设备的 WIFI 策略都设置为“始终开启”。我的服务获取一个 WIFI_MODE_FULL 和一个 PARTIAL_WAKE_LOCK 所以 CPU 和 WIFI 总是在那里。一段时间后,当我想从我的服务器连接到这些设备时,发生了一些不好的事情。
- Samsung Galaxy Note 设备始终正常运行
- HTC Desire 变得无法访问
- 无法访问索尼
我 Ping 了这些设备以查看它们是否存在。结果是:
- Samsung 设备始终立即正常响应 ping 请求
- HTC 和 Sony 设备有时无法访问,有时会响应。但是,即使屏幕打开,他们也会有很长的响应延迟(ping 的时间列有时约为 5000 毫秒)
我知道 WIFI 政策存在一些问题:
- https://code.google.com/p/android/issues/detail?id=9781
- https://code.google.com/p/android/issues/detail?id=6611
为什么亮屏时ping时间还是这样?此外,我知道当屏幕关闭时 CPU 时钟会降低,即使您持有唤醒锁也是如此。此行为会导致处理 TCP 连接的服务代码出现问题吗?
最佳答案
制造商希望能够吹嘘拥有最长的电池生命周期。为此,他们将精简现有功能以延长电池生命周期。
是的,它可能会导致问题,而且确实会导致问题,但这是您应该进行防御性编程的众多原因之一。换句话说,确保您的应用程序已准备好处理丢失的数据包和可能的更长延迟。
希望您的问题不完全是口头上的,您实际上想要一个答案。
关于Android 奇怪的跨设备行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17523493/