多设备连接的问题很典型,一方面实际应用中存在同时和多个设备通信的场景,另一方面蓝牙连接较耗时,如果能尽可能保持连接,则可省去不少时间,用户体验更好。
然而多设备连接也有一些问题要注意,有以下几点:
一,所有设备发起请求都在同一个子线程中集中派发,但是每个设备都有单独的一个任务队列,所有任务都是异步的,但是要串行化执行。
二,由于Android同时连接设备数是有限的,因此当设备数过多时,需要主动释放一些设备的连接,策略就是选择释放不活跃的设备。所谓不活跃就是读写频率低,可采用LRU策略。
三,要注意GATT句柄及时释放,避免泄露
由以上两点,我们不难看出要支持多设备连接,需要一套框架,支持多设备的连接管理和任务调度,包括运行时管理、异步任务串行化、超时或失败重试、GATT句柄管理,还要自动检测设备活跃度,自动断开不活跃设备连接等。有了这套框架的统一管理,再多设备的连接也是一件容易的事情。
此外,对于一些兼容性问题的修复策略,可以集成到框架中。还可以在框架中统一监测设备的通信情况,做一些数据上报。
BluetoothKit就是这样一套框架,能完美地支持多设备连接,这套框架是源于某大型智能家居平台,经过业务剥离形成的一套基础的蓝牙通信框架。