咨询WAIT_FOR_SOMETIME_TO_START_BLUETOOTH的标准时长及官方文档
关于蓝牙启用等待时长的疑问
我编写了一段在应用内启用蓝牙、退出时禁用的代码,如下:
if (!bluetoothAdapter.isEnabled()) { MMLogger.logInfo(MMLogger.LOG_BLUETOOTH, "BluetoothSyncController - Bluetooth was OFF, so Turn it ON"); bluetoothAdapter.enable(); try { Thread.sleep(WAIT_FOR_SOMETIME_TO_START_BLUETOOTH); } catch (InterruptedException ignore) { } MMLogger.logInfo(MMLogger.LOG_BLUETOOTH, "BluetoothSyncController - Bluetooth turned ON"); }
想请教一下:WAIT_FOR_SOMETIME_TO_START_BLUETOOTH 是否有标准时长?有没有相关官方文档可以参考?
回答
首先明确:没有官方指定的标准等待时长,蓝牙启用的实际耗时会因设备硬件性能、系统版本、当前运行负载等多种因素波动,硬编码固定睡眠时长是很不可靠的做法。
官方文档更推荐通过监听蓝牙状态变化的方式来确认蓝牙是否就绪,而不是用Thread.sleep()做盲等,具体做法是:
- 注册
BluetoothAdapter.ACTION_STATE_CHANGED广播接收器 - 在接收器中判断蓝牙状态,当收到
BluetoothAdapter.STATE_ON的状态时,再执行后续需要依赖蓝牙的操作
这种方式能精准捕捉蓝牙真正就绪的时刻,既不会在设备启动蓝牙较慢时因等待不足导致操作失败,也不会在设备启动较快时做无意义的等待浪费时间。
Android官方文档里明确说明,调用enable()后系统是异步启动蓝牙的,不能假设调用方法后蓝牙立即可用,必须通过状态回调或广播来确认就绪状态。
另外还要注意:如果在主线程中调用Thread.sleep()会直接导致UI卡顿,即使在子线程执行,固定延迟的方式也始终存在适配性问题,尽量避免使用。
内容的提问来源于stack exchange,提问作者Yogesh Byndoor
相关产品推荐
相关产品推荐

