除了设置和确切时间(即午夜)与设置延迟(即24小时)之外,使用AlarmManager
和ScheduledExecutorService
定期运行任务之间的区别是什么?
在我的情况下,我需要运行一些代码来每晚检查新数据,并在有新数据时创建新通知。
谢谢!
答案 0 :(得分:36)
ScheduledExecutorService
在您的申请流程中运行。如果应用程序进程终止,则不会运行任何计划任务。因此需要Service
(因此您的流程超出了生命周期的活动活动部分)。
虽然AlarmManager
是一直运行的关键系统服务。如果您的应用程序安排了某些内容并被杀死,那么AlarmManager
可能会再次启动应用程序(通过PendingIntent
)。
这里没有人提到的最后一个主要区别是AlarmManager
知道WakeLock
和电源管理。这意味着AlarmManager
可能会在指定时间唤醒Android设备以运行计划任务。虽然ScheduledExecutorService
对电源管理一无所知,但只会在设备未处于深度睡眠状态时启动任务(即它可能会错过时间)。
答案 1 :(得分:11)
ScheduledExecutorService
只有在您运行所有时间的某个组件(例如Service
)时才有效。因此,它应仅用于组件由于其他原因而在内存中的情况下,为用户增加价值。将一个组件放在内存中只是为了观察时钟滴答是浪费,这也是用户攻击具有任务杀手等开发人员的原因之一。
AlarmManager
是OS提供的系统服务。它可以在时间到来时启动一个组件。因此,您无需运行组件。
在我的情况下,我需要运行一些代码来每晚检查新数据,并在有新数据时创建新通知。
这是AlarmManager
的明确场景。
答案 2 :(得分:5)
我认为ScheduledExecutorService
与您的流程相关联,并且在您的流程被杀死时无效。相比之下,AlarmManager
由操作系统管理,因此即使您的应用程序未运行,它也能正常运行。