【问题标题】:Difference between AlarmManager and ScheduledExecutorServiceAlarmManager 和 ScheduledExecutorService 的区别
【发布时间】:2011-07-02 18:02:35
【问题描述】:

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

就我而言,我需要运行一点代码来每晚检查新数据,并在有新数据时创建新通知。

谢谢!

【问题讨论】:

    标签: android scheduling alarmmanager


    【解决方案1】:

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

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

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

    【讨论】:

    • 当设备处于深度睡眠状态时,还有什么可以工作的吗?我尝试了处理程序,可运行线程,在深度睡眠模式下没有任何工作。
    【解决方案2】:

    ScheduledExecutorService 仅在您有一些组件(例如Service)一直在运行时才能工作。因此,它只应在组件因其他原因而在内存中的情况下使用,从而为用户增加价值。将组件存放在内存中只是为了观察时钟滴答作响是一种浪费,也是用户使用任务杀手等攻击开发人员的原因之一。

    AlarmManager 是操作系统提供的系统服务。它可以在时间滚动时启动组件。因此,您不需要运行该组件。

    就我而言,我需要运行一点代码来每晚检查新数据,并在有新数据时创建新通知。

    这是AlarmManager 的明确方案。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2015-12-19
        • 1970-01-01
        • 2014-07-09
        • 1970-01-01
        • 2012-07-23
        • 1970-01-01
        • 2014-09-24
        • 2013-11-12
        • 1970-01-01
        相关资源
        最近更新 更多