AlarmManager和ScheduledExecutorService之间的区别

时间:2011-07-02 18:02:36

标签: android scheduling alarmmanager

除了设置和确切时间(即午夜)与设置延迟(即24小时)之外,使用AlarmManagerScheduledExecutorService定期运行任务之间的区别是什么?

在我的情况下,我需要运行一些代码来每晚检查新数据,并在有新数据时创建新通知。

谢谢!

3 个答案:

答案 0 :(得分:36)

ScheduledExecutorService在您的申请流程中运行。如果应用程序进程终止,则不会运行任何计划任务。因此需要Service(因此您的流程超出了生命周期的活动活动部分)。

虽然AlarmManager是一直运行的关键系统服务。如果您的应用程序安排了某些内容并被杀死,那么AlarmManager可能会再次启动应用程序(通过PendingIntent)。

这里没有人提到的最后一个主要区别是AlarmManager知道WakeLock和电源管理。这意味着AlarmManager可能会在指定时间唤醒Android设备以运行计划任务。虽然ScheduledExecutorService对电源管理一无所知,但只会在设备未处于深度睡眠状态时启动任务(即它可能会错过时间)。

答案 1 :(得分:11)

ScheduledExecutorService只有在您运行所有时间的某个组件(例如Service)时才有效。因此,它应仅用于组件由于其他原因而在内存中的情况下,为用户增加价值。将一个组件放在内存中只是为了观察时钟滴答是浪费,这也是用户攻击具有任务杀手等开发人员的原因之一。

AlarmManager是OS提供的系统服务。它可以在时间到来时启动一个组件。因此,您无需运行组件。

  

在我的情况下,我需要运行一些代码来每晚检查新数据,并在有新数据时创建新通知。

这是AlarmManager的明确场景。

答案 2 :(得分:5)

我认为ScheduledExecutorService与您的流程相关联,并且在您的流程被杀死时无效。相比之下,AlarmManager由操作系统管理,因此即使您的应用程序未运行,它也能正常运行。