Android 手机中的加速度计和陀螺仪及其功耗

Accelerometer and Gyroscope and its power consumption in Android phones

我在 Android 应用程序中使用加速度计和陀螺仪。我想分析我的应用程序的功耗。比方说应用程序,每 100 毫秒读取这两个传感器,添加它的所有三个轴 (x、y、z),并将它们存储在一个文件中。

现在我不确定这两个传感器是否一直亮着?如果是,那么大部分功耗将来自我如何在我的应用程序中使用或处理这些传感器的值。所以我有以下问题。

  1. 这两个传感器是一直开启还是处于活动状态? (如果是这样,任何参考)。
  2. 那么注册和注销有什么作用呢?如果它们一直亮着,
    那么注销它们不会有任何区别,至少在 功耗方面。

这些问题背后的背景或推理: 陀螺仪比加速度计消耗更多的功率(根据我的分析,它高 4-6 倍)。现在,如果这些传感器始终处于打开状态,那么我可以在我的应用程序中同时使用它们,因为我的应用程序不是由这些传感器的活动状态引起的功耗的原因。由于我使用这些传感器值的方式以及我读取它们的频率,我的应用程序将负责功耗。但是,如果这些被禁用或关闭(根本不消耗功率),那么我必须谨慎决定是否要使用它们,因为当我注册它们时,由于它们的活动,我也会增加功耗status 除了处理它们的值。

来自 Official site:"Always make sure to disable sensors you don't need, especially when your activity is paused. Failing to do so can drain the battery in just a few hours. Note that the system will not disable sensors automatically when the screen turns off."

"Are these two sensors always on or active?" - 似乎这个问题没有通用答案,因为它取决于硬件。其实加速度计和陀螺仪是低功耗的,但是OS支持它们可能会消耗更多电池。

"What does then the register and deregister does ?" - 消除了数据处理的功耗。

主要是对 Andriy Omelchenko 的回答的补充,其中包含更多链接:

1。 这在 Androids Architecture Documentation in the Sensors Section. Specifically that Accelerometer and Gyroscope are handled as non-wakup 连续报告事件但可能不会唤醒 SoC 的传感器中有广泛的 "manufacturer independent" 记录。

所以 是的,您可以假设这 2 个传感器始终处于打开状态

2。 此外,文档指出: 如果应用程序需要后台数据,它需要持有一个唤醒锁 - 可能 the Partial 唤醒锁将防止系统进入低电平 power/sleep 模式 - 这样就可以在不删除事件的情况下处理和传递事件。显然,这会更快地耗尽电池电量。

你可能暗示 registering/unregistering 只要你不保持唤醒锁,对电源的影响可能很小。

但是 一般来说,您不应该认为 register/deregister 传感器对功率优化没有用 - 除了一次性传感器。不仅是因为用于处理和向应用程序传递事件的能力,以及使系统免于睡眠的可能性。这是一个Framework recommendation and these are normally not without cause like the use of register with report delay to make use of batching if possible。影响可能会随着硬件或其他因素的不同而变化。

它也可能是一个有趣的 bug 源,如果 - 例如 - 您假设数据是根据 Wakelock 提供的:文档仅说明对于非唤醒传感器 驱动程序 不允许持有唤醒锁,传感器不应唤醒 SoC。这意味着您的应用程序可能在后台处理事件,也可能不在后台处理事件,具体取决于设备、系统、已安装的应用程序等。

加速度计和陀螺仪并非始终开启。这太疯狂了——任何在移动设备中消耗能量的东西都会尽可能地进入低功耗模式(当前没有应用程序请求它)。因此需要注册/注销。

硬件制造商没有严格的规范要求,因为这是延长电池寿命的常识性优化。