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