我正在开发通过BLE与智能设备连接并与之通信的应用程序。
问题是:处理蓝牙事件的最佳做法是什么队列?
我已经阅读了很多教程,在所有这些教程中我发现了这个:
centralManager = CBCentralManager(delegate: self, queue: nil)
他们选择在主队列(queue: nil
)中处理蓝牙事件,但我认为这不是好习惯。因为可能会有很多查询从中心发送到外围设备,并且很多答案都是从外设发送到中心的。
我认为这可能是应用程序工作缓慢的原因,可能会对生产力造成不利影响,对吗?
这会淹没UI更新队列吗?
答案 0 :(得分:3)
我在蓝牙项目中使用了dispatch_get_global_queue(QOS_CLASS_BACKGROUND,0)一段时间用于CBCentralManager,它运行正常。
^划伤那个。我不建议使用全局队列。原因是全局队列是并发的,您可能需要一个序列号。创建一个新的DispatchQueue(label: "CentralManager")
并将其传递给CBCentralManager
。
所有委托方法都将传递到您指定的队列。如果你对这些方法做了一些非常轻松的操作,我猜你可以保留主队列。但最好使用后台队列。
答案 1 :(得分:1)
您绝对应该为CBCentralManager
使用单独的队列,并且最好还使用它来与CBPeripheral
对象进行所有通信 - 因此您的主队列不会被阻止。
dispatch_async
队列中的事件应该不是问题 - 只要读/写请求没有延迟。
答案 2 :(得分:-2)
从蓝牙的角度来看,我认为排队事件不是最佳做法;除了你想延迟发送消息。