Android AlarmManager 没有打开屏幕
Android AlarmManager without turning screen on
我的应用程序有一个实时模块,它应该每 60 秒 ping 服务器一次。否则,连接将断开,设备将需要重新连接。
第一次尝试是使用 Thread.Sleep 使 ping 线程以所需的频率运行。第二次尝试是使用 ScheduleExecutorService。两者都工作得很好,但只有在设备充电或屏幕打开时才有效。
稍作阅读后,我意识到发生这种行为是因为设备的处理器处于休眠状态,这会干扰计时器。因此,建议使用 AlarmManager...
开始使用后,我发现我的设备屏幕开始频繁亮起,我认为这是'wakes the device up'的alarmmanager引起的。我搜索了一下,看看如何使用 AlarmManager 执行一些后台操作,即使设备正在休眠,也没有打开屏幕,但没有找到任何东西。
那么,有没有办法使用AlarmManager或者其他方法来实现呢?即使设备处于休眠状态,也可以在不打开屏幕的情况下执行后台任务?
PS1:我知道这种方法对电池消耗的影响,关于不打开屏幕的要求是为了尽量减少它的影响。
PS2:后台服务正在使用 AlarmManager 的意图。
如果您正在使用 onReceive()
方法,那可能正在获取您的唤醒锁。删除 onReceive()
.
中的 WakeLock 参数
报警管理器没有打开屏幕。从文档中,
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
从 API 级别 17 开始,最后 3 个已弃用。
我建议您使用 PARTIAL_WAKE_LOCK 来完成您的任务。或者你可以看看 WakefulBroadcastReceiver
我的应用程序有一个实时模块,它应该每 60 秒 ping 服务器一次。否则,连接将断开,设备将需要重新连接。
第一次尝试是使用 Thread.Sleep 使 ping 线程以所需的频率运行。第二次尝试是使用 ScheduleExecutorService。两者都工作得很好,但只有在设备充电或屏幕打开时才有效。
稍作阅读后,我意识到发生这种行为是因为设备的处理器处于休眠状态,这会干扰计时器。因此,建议使用 AlarmManager...
开始使用后,我发现我的设备屏幕开始频繁亮起,我认为这是'wakes the device up'的alarmmanager引起的。我搜索了一下,看看如何使用 AlarmManager 执行一些后台操作,即使设备正在休眠,也没有打开屏幕,但没有找到任何东西。
那么,有没有办法使用AlarmManager或者其他方法来实现呢?即使设备处于休眠状态,也可以在不打开屏幕的情况下执行后台任务?
PS1:我知道这种方法对电池消耗的影响,关于不打开屏幕的要求是为了尽量减少它的影响。
PS2:后台服务正在使用 AlarmManager 的意图。
如果您正在使用 onReceive()
方法,那可能正在获取您的唤醒锁。删除 onReceive()
.
报警管理器没有打开屏幕。从文档中,
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
从 API 级别 17 开始,最后 3 个已弃用。
我建议您使用 PARTIAL_WAKE_LOCK 来完成您的任务。或者你可以看看 WakefulBroadcastReceiver