我在Android应用中使用加速度计和陀螺仪。我想要了解我的应用程序的功耗。让我们说应用程序,每100毫秒读取这两个传感器,添加其所有三个轴(x,y,z),并将它们存储在一个文件中。
现在我不确定这两个传感器是否一直亮着?如果是,那么大部分功耗将来自我在应用中使用或处理这些传感器值的方式。所以我有以下问题。
这些问题背后的背景或推理: 陀螺仪比加速度计消耗更多功率(根据我的分析,它高4-6倍)。现在,如果这些传感器一直打开,那么我可以在我的应用程序中使用它们,因为我的应用程序不是这些传感器的活动状态导致功耗的原因。由于我使用这些传感器值的方式以及我阅读它们的频率,我的应用程序将负责功耗。但是,如果这些被禁用或关闭(根本不消耗电源),那么我必须仔细决定是否要使用它们,因为当我注册它们时,我也会因为它们的活动而增加功耗状态除了处理它们的值。
答案 0 :(得分:2)
主要是作为Andriy Omelchenko答案的补充,还有更多链接:
1。 这在Androids Architecture Documentation in the Sensors Section中有广泛的“制造商独立”记录。具体而言,Accelerometer and Gyroscope作为non-wakup传感器处理,它们连续报告事件,但可能无法唤醒SoC。
所以是的,你可以假设这两个传感器一直在。
2。 此外,文档声明:如果应用程序需要后台数据,则需要持有Wakelock - 可能是the Partial Wakelock,这将使系统无法进入低功耗/睡眠模式 - 例如处理和传递事件而不被删除。显然这会更快地耗尽电池。
您可能暗示只要您不保留唤醒锁,注册/取消注册对电源的影响可能会很小。
但一般情况下,您不应该认为注册/取消注册传感器以进行功率优化 - 除了一次性传感器。不仅因为用于处理和向应用程序传递事件的功率以及使系统保持睡眠状态的可能性。这是一个Framework recommendation,这些通常不会像使用register with report delay to make use of batching if possible一样没有原因。影响可能会因硬件或其他因素而有所不同。
如果 - 例如 - 您假设根据 Wakelock 提供数据,它也可能是一个有趣的错误源:文档仅指出对于非唤醒传感器驱动程序不允许持有Wakelock,传感器不应唤醒SoC。这意味着您的应用可能会在后台处理事件,具体取决于设备,系统,已安装的应用等。
答案 1 :(得分:1)
来自Official site:"始终确保禁用您不需要的传感器,尤其是在您的活动暂停时。如果不这样做,可能会在几个小时内耗尽电池电量。请注意,当屏幕关闭时,系统不会自动禁用传感器。"
"这两个传感器是打开还是处于活动状态?" - 似乎这个问题没有一般性的答案,因为它取决于硬件。实际上,加速度计和陀螺仪具有低功耗,但它们支持OS可能会消耗更多电池。
"注册和注销会做什么?" - 消除了数据处理的功耗。
答案 2 :(得分:1)
加速度计和陀螺仪不始终打开。这将是疯狂的 - 绝对任何能够在移动设备中获取能力的东西都会被置于低功耗模式 - 无论应用程序当前是否正在请求它。因此需要注册/注销。
硬件制造商没有严格的要求,因为这是增加电池寿命的常识优化。