gpt4 book ai didi

android - CPU 休眠时不会触发 Handler postDelayed 吗?

转载 作者:IT老高 更新时间:2023-10-28 23:32:06 24 4
gpt4 key购买 nike

我有一些 Activity Handlers以不超过 5 分钟的间隔执行。 Activity 从 BroadcastReceiver 发起并且可能会在屏幕关闭的情况下启动,等待用户拿起手机并获取用户输入,当这种情况发生时, Activity onPause()如此调用以确保 CPU 处于 sleep 模式。我没有将 Activity 设置为打开屏幕,因为我想尽可能节省电量。

我已经用我的手机测试过,效果非常好,而屏幕全部关闭Handlers执行他们必须运行的所有代码。如果我在 Activity 打开时打开和关闭屏幕,一切正常。

现在,我到处都读到,当屏幕关闭和 CPU 休眠时,某些设备无法按预期工作,大多数情况下使用加速度计。现在我的问题是,我需要购买 WakeLock所以当我的 Activity 打开时CPU不会休眠?我真的很想知道这一点,因为正如我之前所说,我不想通过购买昂贵的 WakeLock 来“浪费”电池。 .

我希望真正了解其工作原理的人的详细回答。

最佳答案

您的目标无法通过您的方法稳定实现。如果您使用 Handler 的 postDelayed() 方法并且 CPU 进入 deepsleep,则 ms 计数器将停止,并且只有在 CPU 再次唤醒时才会继续。

See this for more detail.

因此,如果您想执行某种 cron 作业,则需要使用唤醒锁。幸运的是,有一个服务实现可以做到这一点:Wakeful IntentService

来自文档:

The recommended pattern for Android's equivalent to cron jobs and Windows scheduled tasks is to use AlarmManager. This works well when coupled with an IntentService, as the service will do its work on a background thread and shut down when there is no more work to do. There's one small problem: IntentService does nothing to keep the device awake. If the alarm was a WAKEUP variant, the phone will only stay awake on its own while the BroadcastReceiver handling the alarm is in its onReceive() method. Otherwise, the phone may fall back asleep. WakefulIntentService attempts to combat this by combining the ease of IntentService with a partial WakeLock.

关于android - CPU 休眠时不会触发 Handler postDelayed 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17324587/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com