gpt4 book ai didi

没有打开屏幕的Android AlarmManager

转载 作者:行者123 更新时间:2023-11-29 19:52:52 28 4
gpt4 key购买 nike

我的应用程序有一个实时模块,它应该每 60 秒 ping 服务器一次。否则,连接将断开,设备将需要重新连接。

第一次尝试是使用 Thread.Sleep 使 ping 线程以所需的频率运行。第二次尝试是使用 ScheduleExecutorService。两者都工作得很好,但只有在设备充电或屏幕打开时才有效。

读了一点之后,我意识到这种行为的发生是因为设备的处理器休眠并且这会干扰计时器。因此,建议使用 AlarmManager...

开始使用后,我发现我的设备屏幕开始频繁打开,我认为这是由“唤醒设备”的 alarmmanager 引起的。我搜索了一下,看看如何使用 AlarmManager 执行一些后台操作,即使设备正在休眠,也没有打开屏幕,但没有找到任何东西。

那么,有没有办法使用 AlarmManager 或其他方法来完成此操作?即使设备处于休眠状态,也可以在不打开屏幕的情况下执行后台任务?

PS1:我知道这种方法对电池消耗的影响,关于不打开屏幕的请求是为了尽量减少它的影响。

PS2:AlarmManager 的 Intent 正在被后台服务使用。

最佳答案

警报管理器不会打开屏幕。从文档中,

When an alarm goes off, the Intent that had been registered for it is broadcast by the system, automatically starting the target application if it is not already running.

我在我的代码中使用它,它不会打开屏幕,除非我明确设置唤醒锁定策略来打开它。看看WakeLock

enter image description here

从 API 级别 17 开始,最后 3 个已弃用。

我建议您为您的任务使用 PARTIAL_WAKE_LOCK。或者你可以看看 WakefulBroadcastReceiver

关于没有打开屏幕的Android AlarmManager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36967541/

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