【问题标题】:Accelerometer and Gyroscope and its power consumption in Android phonesAndroid手机中的加速度计和陀螺仪及其功耗
【发布时间】:2016-10-12 10:27:58
【问题描述】:

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

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

  1. 这两个传感器是一直打开还是激活? (如果有,请提供任何参考资料)。
  2. 那么注册和注销有什么作用呢?如果它们始终开启,
    那么注销它们不会有任何区别,至少在 功耗方面。

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

【问题讨论】:

  • 问题是what could you do if this is still consuming power?如果你去掉你的监听器,你会减少消耗(之前有状态)。但是您无权以物理方式阻止这些传感器运行,那么您想做什么?以这种速率接收这些事件的 CPU 成本相当消耗
  • @AxelH 我同意如果我移除我的监听器,由于数据处理的功耗将会减少。但是,当没有应用程序使用这些传感器时,我很好奇这些传感器的状态。如果我想使用两个或一个传感器,它可以帮助我做出设计决定。如果让陀螺仪和加速度计始终打开,那么我想在我的应用程序中同时使用它们。但是,如果不是,那么我可能不会使用陀螺仪,因为它消耗的功率比加速度计要多。
  • 现在说得通了! :) 您可以通过杀死所有不需要的应用程序(使用传感器的应用程序)然后比较激活传感器侦听器之前和之后消耗的功率来进行一些测试(但这会很困难,因为可能有操作系统进程使用传感器,所以这可能不是真的结论。看下面的消耗。stackoverflow.com/questions/10293713/…
  • @AxelH 我检查了链接,但在这个问题上没有明确的答案。如果这些传感器通常保持活跃与否,谜团仍然存在。
  • 这不是一个答案,而是一种检查自己消耗的方法。

标签: android accelerometer android-sensors gyroscope


【解决方案1】:

主要是对 Andriy Omelchenko 的回答的补充,还有更多链接:

1。 这是在Androids Architecture Documentation in the Sensors Section 中广泛记录的并且“独立于制造商”。具体来说,Accelerometer and Gyroscope 被当作non-wakup 传感器处理,它们连续报告事件但可能不会唤醒 SoC。

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

2。 此外,文档指出: 如果应用程序需要后台数据,它需要持有一个唤醒锁 - 可能是 the Partial 唤醒锁,它将阻止系统进入低功耗/睡眠模式 - 这样事件被处理和交付而不会被丢弃。显然这会更快地耗尽电池。

您可以暗示,只要您不保留唤醒锁,注册/取消注册可能对电源的影响很小。

一般来说,您不应认为注册/取消注册传感器以优化功率 - 除了一次性传感器。不仅因为用于处理和向应用程序传递事件的能力以及使系统处于睡眠状态的可能性。这是一个Framework recommendation,这些通常不是没有原因的,比如使用register with report delay to make use of batching if possible。影响可能会因不同的硬件或其他因素而有所不同。

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

【讨论】:

  • 感谢您的解释和参考。它是我正在寻找的相关内容。读完后,我想,这两个传感器总是亮着的。我亲自测试了这些传感器,无论是否获得部分锁定。当我没有获得部分锁定并且手机屏幕关闭时,即使它们已向侦听器注册,我也不会从这些传感器获取数据事件。但是,当我获得锁时,即使屏幕关闭,它也能正常报告。
  • 如果我们看到任何其他解释,请稍等片刻,否则我将接受您的回复作为答案。
  • 我的意思是当另一个应用程序保留唤醒锁并保持系统唤醒时会发生什么,您的应用程序是否也收到事件?如果 CPU 处于睡眠状态,则应忽略这些事件,但 Sensors CDD 和系统/api 文档都没有明确说明即使另一个应用程序保留了锁,您也不会获取数据。
  • 我还没有测试过。我可以推测,如果任何应用程序在使用这些传感器时获得了锁,那么传感器数据(事件)应该被传递给所有正在监听它的应用程序,除非他们在 onpause() 或 onstop() 上取消注册这些传感器方法。
【解决方案2】:

来自Official site:“始终确保禁用您不需要的传感器,尤其是在您的活动暂停时。不这样做可能会在几个小时内耗尽电池电量。请注意,系统不会禁用传感器屏幕关闭时自动关闭。”

“这两个传感器是始终打开还是处于活动状态?” - 似乎这个问题没有一般的答案,因为它取决于硬件。实际上加速度计和陀螺仪的功耗很低,但是操作系统支持它们可能会消耗更多的电池。

“那么注册和注销是做什么的?” - 消除了它们处理数据的功耗。

【讨论】:

  • 我认为加速度计必须一直“打开”(当显示器打开时),否则设备无法响应方向变化并相应地旋转 UI。显然,在许多设备上,当显示屏关闭时它会关​​闭,这会导致应用程序在没有用户交互的情况下尝试在后台执行任何与方向/加速度相关的操作(例如基于加速度计的计步器或睡眠跟踪器)。
  • @Andriy Omelchenko 我可以理解,由于来自这些传感器的处理数据,取消注册将消除功耗。但是,我不确定此功能是否会禁用这些传感器。虽然加速度计的功耗很低,但陀螺仪比加速度计消耗的电量要多得多。我使用一个应用程序来测量它,它几乎是加速度计的 5-6 倍。
  • @Markus Kauppinen 你指的是屏幕方向吗?如果是的话,当我们改变手机的方向时,可以禁用它并且屏幕没有方向。那么这是否意味着当这个选项被禁用时,加速度计也会被禁用?
  • @zub12 我想如果您特别请求加速度计数据,那么您当然会得到它,而不管自动 UI 旋转如何。但我自己没有检查过。
  • @Markus Kauppinen 一般来说你是对的,但CDD 对加速度计或陀螺仪的功率控制没有要求。所以可能会有所不同。
【解决方案3】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-10
    • 2019-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多