加速度计和陀螺仪及其在Android手机中的功耗
作者:互联网
我在Android应用中使用了加速度计和陀螺仪.我想分析我的应用程序的功耗.假设该应用程序每100毫秒读取这两个传感器,将其所有三个轴(x,y,z)相加,然后将它们存储在文件中.
现在我不确定这两个传感器是否一直打开?如果是,那么大部分功耗将来自我在应用程序中如何使用或处理这些传感器的值.所以我有以下问题.
>这两个传感器是始终打开还是处于活动状态? (如果是这样,请参考).
>然后注册和注销会做什么?如果他们一直在线,
那么至少在以下情况下注销它们不会有任何区别
耗电量方面.
这些问题的背景或原因:
陀螺仪比加速度计消耗更多的功率(根据我的分析,陀螺仪的加速度是加速度的4-6倍).现在,如果这些传感器始终处于打开状态,那么我可以在我的应用程序中同时使用它们,因为我的应用程序不是这些传感器的活动状态导致功耗的原因.由于我使用这些传感器值的方式以及我多久读取一次,我的应用将负责功耗.但是,如果禁用或关闭了这些功能(根本不消耗电源),那么我是否要使用它们就必须做出谨慎的决定,因为当我注册它们时,由于它们的活动,我还会增加功耗状态,除了处理其值.
解决方法:
主要是除了Andriy Omelchenko的答案以外,还有更多链接:
1.
这在Androids Architecture Documentation in the Sensors Section中得到了广泛的记载,并且是“与制造商无关的”.特别地,将Accelerometer and Gyroscope当作non-wakup传感器来处理,它们连续报告事件,但可能不会唤醒SoC.
所以可以,您可以假设这两个传感器始终处于打开状态.
2.
此外,文档还指出:如果应用程序需要在后台运行数据,则它需要持有Wakelock(可能是the Partial Wakelock),这将使系统不进入低功耗/睡眠模式-以便事件得以处理和传递而不会丢失.显然,这会更快地耗尽电池电量.
您可能暗示只要不保持Wakelock,注册/注销对电源的影响可能很小.
但是总的来说,您不应该认为注册/注销传感器来优化功率是没有用的-除了一次性传感器.不仅因为用于处理事件并将事件传递给应用程序的功能强大,而且还使系统无法进入睡眠状态.它是Framework recommendation,通常不会没有像使用register with report delay to make use of batching if possible这样的原因.影响可能会随硬件或其他因素的变化而变化.
例如,如果您假设根据Wakelock提供了数据,则它也可能是一个有趣的bug来源:该文档仅声明对于非唤醒传感器,不允许驾驶员持有Wakelock,并且传感器不应唤醒SoC.这意味着您的应用可能在后台处理事件,也可能不取决于设备,系统,已安装的应用等.
标签:android-sensors,accelerometer,gyroscope,android 来源: https://codeday.me/bug/20191026/1937859.html