1.背景
我们在平时通过Android 调用标准接口做ble扫描时会调用andriod 公开接口,也就是BluetoothLeScanner中的startScan方法,短时间的扫描大家可能都不太注意功耗的问题,但是如果时间扫描长的话,肯定需要注意功耗带来的影响,本篇文章主要就是给这种长时间扫描,不,短时间扫描也要注意的功耗问题
2.功耗测试
a. 不添加过滤条件直接扫描
直接调用如下:
bleScanner!!.startScan(null, getScanSetting(ScanSettings.SCAN_MODE_LOW_LATENCY), mScanCallback)
查看cpu使用率:
adb shell top -m 40
可以看到扫描时蓝牙cpu使用率占用达到46%,是非常高的
b.测试添加蓝牙名称过滤
测试代码如下:
val scanFilter = ScanFilter.Builder()
.setDeviceName(BLE_NAME)
.build()
val list = ArrayList<ScanFilter>()
list.add(scanFilter)
bleScanner!!.startScan(list, getScanSetting(ScanSettings.SCAN_MODE_LOW_LATENCY), mScanCallback)
查看cpu使用率:
扫描瞬间蓝牙cpu占用率仅仅为1.3,
然后在看扫描稳定时的占用率:
此时占用率是非常低的。
3. 结论
大家在实际生产应用时,如果可以定义过滤的条件的场景下,扫描时一定要将ScanFilter 添加,这样能大大降低功率