问题现象
使用蓝牙添加其他设备时,关闭蓝牙并退出页面,应用闪退。
背景知识
- JsCrash异常根据不同的异常场景,在Reason字段进行了分类,分为Error、TypeError、SyntaxError、ReferenceError、RangeError等错误类型。参考文档JS Crash(进程崩溃)检测。
- JsCrash日志规格说明可以参考日志规格。
问题定位
- 从faultlogger目录下获取到应用的JsCrash故障日志,故障原因是Error,故障信息为BusinessError 2900003: Bluetooth disabled,蓝牙开关已关闭。
Error name:Error
Error message:BusinessError 2900003: Bluetooth disabled.
Error code:2900003
Stacktrace:
Cannot get SourceMap info, dump raw stack:
at closeScan (default|@ohos/common|1.0.0|src/main/ets/bluetooth/Scan.ts:40:40)
at aboutToDisappear (default|device|1.0.0|src/main/ets/components/BTScan.ts:62:62)
- 从堆栈中看出,在退出界面时,应用调用了closeScan函数,执行了关闭蓝牙扫描操作。对于停止蓝牙扫描接口,例如ble.stopBLEScan,如果在蓝牙已关闭的情况下调用,就会出现Bluetooth disabled异常。
分析结论
应用在蓝牙已关闭的情况下,调用了停止蓝牙扫描的接口,导致上报了JsCrash故障并闪退。
修改建议
因为用户在扫描过程中关闭了蓝牙,扫描已经终止,所以只需使用try-catch捕获停止扫描接口抛出的蓝牙未开启异常即可。
推荐使用API version 15开始支持的多路扫描方式,详情参考低功耗蓝牙。