【问题标题】:How to improve Android Bluetooth Low Energy GATT throughput?如何提高 Android 蓝牙低功耗 GATT 吞吐量?
【发布时间】: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


【解决方案1】:

我希望自 2014 年 6 月 5 日起,您能找到解决问题的方法。 我也有同样的问题。前 2 ~ 3 秒,我在 ~100 毫秒内收到数据。之后,我每 2000 毫秒接收一次数据。我在 4.3 及以上的设备上测试。

我在 BluetoothGatt 上找到了 Lollipop 版本及以上的 requestConnectionPriority。 我还没有找到 4.* 版本的解决方案。如果有人有建议。

希望这对蓝牙数据传输有问题的人有所帮助!

【讨论】:

  • 我没有再使用它了。但感谢您分享 Lollipop 的解决方法。
猜你喜欢
  • 2014-02-25
  • 1970-01-01
  • 2015-02-17
  • 2020-07-25
  • 2015-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多