为什么自 Lollipop 以来扫描 iBeacons 使用的电量更少?

Why does scanning for iBeacons use less battery since Lollipop?

根据Android Beacon Librarydocumentation

Fast background detections on Android 5.0+

On Android 5.0, new scanning APIs allow for more efficient background scanning that saves provide similar power savings to the technique described above, but with much faster beacon detection times. Instead of it taking up to five minutes to detect a beacon (with the defaults described above), it detections of new beacons generally take place within a few seconds.

但是查看 Android 的官方文档,我能找到的主要新内容是 BlueToothLeScanner,它在 API 21.
中有介绍 这个新 class 的文档没有提到任何关于使用更少能源的内容。

假设Android Beacon Library也在使用这些框架,为什么会更节能?
即这个库的处理与在我自己的应用程序中调用 startScan() 而不使用这个库有什么不同吗?

Android 5 引入了支持扫描过滤器的新扫描 API,它在 BLE 广告数据包中查找字节模式。这些过滤器专为在硬件中实现这些过滤器的蓝牙芯片而设计。这意味着蓝牙芯片将卸载所有处理直到匹配,然后才将数据包发送到操作系统。从电池的角度来看,这要高效得多。当引入扫描过滤器时,我自己在 Nexus 5 上进行的测试表明,过滤器使用的电池电量低于未过滤扫描的 10%。新一代手机上的新一代芯片效率更高。

在Lollipop之前的API中,没有扫描window/间隔设置。使用的参数被硬编码为 5000/5000,这意味着收音机一直在收听传入的广告。

使用新的 API,您可以将扫描 window / 间隔设置为 "balanced",这将使用参数 500/5000 或类似参数。与无线电处于活动状态时 100% 相比,这需要 10% 的能量!

新的 API 也有方法可以在蓝牙芯片而不是主 CPU 中完成数据包过滤。这可能会稍微降低功率,但我认为这只会在嘈杂的区域(许多广​​告商)很重要。