android 当设备屏幕关闭一段时间后传感器事件变慢

android sensor event slows down when device screen is off for a while

我正在尝试以 50 毫秒的周期收集加速度计值,并每隔 1 分钟对收集到的值执行一次操作。所以我使用带有 RTC_WAKEUP 标志的 1 分钟未决意图的警报管理器,并将传感器事件设置为 50 毫秒。起初似乎传感器事件在准确的时间段内被调用得很好,并且即使在我的设备屏幕关闭的情况下,每过一分钟就会收集 1150~1210 个加速度计值,但是当我从计算机上拔下我的设备并关闭屏幕电源时,它开始变得越来越慢,最后它每 1 分钟只收集了 60~100 个样本。 所以我目前一直在获取 Wakelock,并用计时器替换警报管理器以每 1 分钟执行一次计时器任务。但是我担心我的电池会耗尽。

下面是我想问你的问题

1) 设备插入电脑或充电器时设备是否处于唤醒状态?

2) 哪种方法对电池寿命更好?使用 alarm maganer 每 2 秒获取一次唤醒锁以保持设备清醒并在达到 1 分钟时执行某些操作?还是使用当前的方法一直获取唤醒锁来使设备处于活动状态并使用计时器每 1 分钟执行一次操作?

我发现phone只有插到电脑上才有效。从计算机上拔下插头后,phone 几分钟后收集传感器值的速度变慢了。因此,我将 A​​larmManager 更改为每 2 秒触发一次警报意图,以执行计时任务并保持设备唤醒。但是 phone 有时不会在准确的时间每 2 秒触发一次警报,这对我的应用程序的目的至关重要。所以我改变了方法来保持 phone 从使用 A​​larmManager 一直保持 Wakelock 并使用 TimerTimertask做定时任务。计时器完成所有计时任务后释放唤醒锁。 sensor event 里面的代码只收集样本,将样本放入队列,每 2 秒在定时器任务中,它使用 fft 将收集到的样本转换到频域,这需要大量的计算。

我看过很多帖子,说在电池寿命方面,持有唤醒锁真的很低效。但是当我持有唤醒锁时,我检查了每个定时器任务和正在处理的传感器事件期间的 cpu 使用情况,每 2 秒和 50 毫秒。它每秒仅使用总 cpu 使用量的 0.71~1.75%!!我认为这对电池寿命来说还不错。因此,我通过在计时器任务和传感器事件的同一时间段内保持唤醒锁 7 小时再次进行测试。结果是它使用了不到 10% 的电池,并且几乎每 50 毫秒收集一次传感器值样本,并且几乎每 2 秒收集一次计时器任务!!

由于每个计时器任务和传感器事件中的代码重量,我预计会使用更多电池。我很高兴知道,如果我仔细设计定时任务代码,即使持有唤醒锁并保持 phone 的 cpu 存活,电池寿命也不会那么糟糕!