Swift:为蓝牙中央管理器选择队列
Swift: Choose queue for Bluetooth Central manager
我正在开发将通过 BLE 与智能设备连接并与之通信的应用程序。
问题是:处理蓝牙事件的最佳做法是什么队列?
我读了很多教程,在所有教程中我发现了这个:
centralManager = CBCentralManager(delegate: self, queue: nil)
他们选择在主队列 (queue: nil
) 中处理蓝牙事件,但我认为这不是好的做法。因为可能有很多查询从中央设备发送到外围设备,而很多答案从外围设备发送到中央设备。
我认为这可能是应用程序运行缓慢的原因,可能会对工作效率产生不利影响,对吗?
这会淹没 UI 更新队列吗?
从蓝牙的角度来看,我不认为将事件排队是最佳做法;除了你想延迟发送消息。
你绝对应该为 CBCentralManager
使用一个单独的队列,最好也将它用于与 CBPeripheral
对象的所有通信 - 这样你的主队列就不会被阻塞。
dispatch_async
队列中的事件应该不是问题 - 只要 read/write 请求没有延迟。
我在我的蓝牙项目中使用 CBCentralManager dispatch_get_global_queue(QOS_CLASS_BACKGROUND, 0) 有一段时间了,它工作完美。
^ 从头开始。我不建议使用全局队列。原因是全局队列是并发队列,而您可能需要串行队列。创建一个新的 DispatchQueue(label: "CentralManager")
并将其传递给 CBCentralManager
.
所有委托方法都将传送到您指定的队列。如果你对这些方法做一些非常轻的操作,我想你可以保留主队列。但是最好使用后台队列。
我正在开发将通过 BLE 与智能设备连接并与之通信的应用程序。
问题是:处理蓝牙事件的最佳做法是什么队列?
我读了很多教程,在所有教程中我发现了这个:
centralManager = CBCentralManager(delegate: self, queue: nil)
他们选择在主队列 (queue: nil
) 中处理蓝牙事件,但我认为这不是好的做法。因为可能有很多查询从中央设备发送到外围设备,而很多答案从外围设备发送到中央设备。
我认为这可能是应用程序运行缓慢的原因,可能会对工作效率产生不利影响,对吗?
这会淹没 UI 更新队列吗?
从蓝牙的角度来看,我不认为将事件排队是最佳做法;除了你想延迟发送消息。
你绝对应该为 CBCentralManager
使用一个单独的队列,最好也将它用于与 CBPeripheral
对象的所有通信 - 这样你的主队列就不会被阻塞。
dispatch_async
队列中的事件应该不是问题 - 只要 read/write 请求没有延迟。
我在我的蓝牙项目中使用 CBCentralManager dispatch_get_global_queue(QOS_CLASS_BACKGROUND, 0) 有一段时间了,它工作完美。
^ 从头开始。我不建议使用全局队列。原因是全局队列是并发队列,而您可能需要串行队列。创建一个新的 DispatchQueue(label: "CentralManager")
并将其传递给 CBCentralManager
.
所有委托方法都将传送到您指定的队列。如果你对这些方法做一些非常轻的操作,我想你可以保留主队列。但是最好使用后台队列。