打盹模式如何影响已注册的侦听器(尤其是传感器侦听器)

时间:2016-06-12 16:02:53

标签: android wear-os android-sensors

Doze模式如何影响已注册的侦听器?

另外,我想知道它是如何影响传感器监听器的。

我的问题是我在清单中有一个Compiled lib/sigiltest.ex ** (CompileError) (for doctest at) lib/sigiltest.ex:7: undefined function sigil_a/2 (stdlib) lists.erl:1337: :lists.foreach/2 (stdlib) erl_eval.erl:670: :erl_eval.do_apply/6 具有唤醒锁定权限。 watchFace每分钟运行WatchFaceService。很多时候,当设备处于打盹状态时会发生这种情况。那时它会为HR注册一个监听器来收集10个值。根据我的观察,在听众注册后,打盹模式会启动,但传感器保持活动状态。 例如,HR传感器保持点亮状态。

这是正常的,为什么?以下是我的观察

采样周期为0微秒的监听器:

onTimeTick

日志:

sensorManager.registerListener(averagingSensorEventListener, sensor, averageSamplingPeriodUs, averageMaxReportLatencyUs);

完成时间超过4分钟,在这几分钟内,HR传感器处于活动状态(绿灯),而不会触发06-12 17:35:00.308 724-724/? D/android.sensor.heart_rate: Starting average calculation 06-12 17:36:01.065 724-724/? D/android.sensor.heart_rate: Event value 75.0 accepted 06-12 17:36:01.166 724-724/? D/android.sensor.heart_rate: Event value 75.0 accepted 06-12 17:36:20.471 724-724/? D/android.sensor.heart_rate: Event value 71.0 accepted 06-12 17:37:01.066 724-724/? D/android.sensor.heart_rate: Event value 72.0 accepted 06-12 17:38:01.067 724-724/? D/android.sensor.heart_rate: Event value 73.0 accepted 06-12 17:39:00.072 724-724/? D/android.sensor.heart_rate: Event value 81.0 accepted 06-12 17:39:28.135 724-724/? D/android.sensor.heart_rate: Event value 81.0 accepted 06-12 17:39:28.276 724-724/? D/android.sensor.heart_rate: Event value 80.0 accepted 06-12 17:39:29.244 724-724/? D/android.sensor.heart_rate: Event value 77.0 accepted 06-12 17:39:30.110 724-724/? D/android.sensor.heart_rate: Event value 75.0 accepted 06-12 17:39:31.172 724-724/? D/android.sensor.heart_rate: Event value 73.0 accepted 06-12 17:39:31.173 724-724/? D/android.sensor.heart_rate: Stopped listening 06-12 17:39:31.180 724-724/? D/android.sensor.heart_rate: Average calculated: 76.0 06-12 17:39:31.180 724-724/? D/android.sensor.heart_rate: Event value 76.0 accepted 回调或报告侦听器注册的值。

更新:

对于我的问题,在莫拉莱斯的出色答案之后,我通过每次需要注册一个监听器解决了这个问题,我获得了一个唤醒锁,并在完成采样后将其释放。这样,事件与我要求的时间一致,并且不会使传感器保持活动状态。

1 个答案:

答案 0 :(得分:5)

传感器

文档说有几个sensor types,每个传感器都有一个reporting-mode连续 on-change one-拍摄特殊)并且每个传感器都按type传感器归类:

  • 唤醒传感器:确保其数据的传送与SoC的状态无关。
  • 非唤醒传感器:不要阻止SoC进入挂起模式,也不要将SoC唤醒以报告数据。

Doze文档未指出有关特定传感器的任何信息,但配置打盹模式所需的significant motion sensor除外。

要查看各个传感器类型说明,了解有关生成事件的详细信息,您可以查看documentation

限制

在处于打盹模式时,您的应用有一些限制

  • 网络访问暂停。
  • 系统会忽略wake locks
  • 标准AlarmManager警报(包括 setExact() setWindow())会延迟到下一个维护时段。
  • 系统不执行Wi-Fi扫描。
  • 系统不允许sync adapters运行。
  • 系统不允许JobScheduler运行。

Doze会对应用程序产生不同的影响,具体取决于它们提供的功能及其使用的服务。许多应用程序在Doze周期内正常运行而无需修改。在某些情况下,您必须优化应用管理网络警报作业同步的方式。应用应该能够在每个维护窗口中有效地管理活动。

来自Optimizing for Doze and App Standby

相关问题