【发布时间】:2014-07-27 01:59:05
【问题描述】:
我在使用 Android BLE API 进行多次 GATT 连续读取时遇到性能问题。
我可以在大约 5 或 6 秒内每秒读取大约 10 个数据包。在我读取 ~65 的数据包后,吞吐量下降到每 1.5 秒大约 1 个数据包。
我做了几次测试,内部 BLE 似乎变得非常慢。在这种情况下,从 Java GATT 读取调用到外围设备大约需要 750 毫秒(外围设备没有瓶颈),而返回到 Java API 回调大约需要 750 毫秒。
在我看来,BLE 堆栈实现很差,因为当我断开与设备的连接(可能清理了一些资源)然后重新连接时,我可以重现同样的问题:第一次读取大约 10 个数据包/秒仅 5 或 6 秒(约 65 个数据包读取),然后它会变慢。
我使用 Galaxy S4 和 Nexus 4 设备对其进行了测试。两者都一样。
有什么改进的建议吗?
【问题讨论】:
-
可能是 BLE 设备正在请求减慢其连接间隔以节省电量。在我知道连接间隔很快的设备上,我可以无限期地以这种高速读取和写入(一直到大约 7.5 毫秒,但最终会以这种速度重试很多次)。
-
这里不是我的情况,因为我使用BlueZ和iOS高速请求相同的东西没问题。您使用的是哪个版本的 Android?
-
我在各种设备上使用从 4.3 到 5.0 的版本,并且我经常进行与 iOS 上几乎同时运行的大数据传输。可以发一下代码吗?
-
我用的是4.4,还没试过5.0。不幸的是,我无法分享代码,但我可以向您保证,我遵循了与 Google 的 BLE 示例项目相同的模式,我希望这是最佳实践。也许您知道比 Google 提供的更好的实施方式?
-
我了解无法共享代码。我去看了这里的示例演示:developer.android.com/guide/topics/connectivity/… 如果这是您正在做的事情,那么马上我会说为所有进来的东西发送一个意图会稍微减慢速度。我使用 onCharacteristicChanged 并直接从中读取值。除此之外,我没有看到任何不寻常的地方。
标签: java android bluetooth bluetooth-lowenergy gatt