【问题标题】:Should I use AlarmManager or JobScheduler for this?我应该为此使用 AlarmManager 还是 JobScheduler?
【发布时间】:2017-08-18 15:48:11
【问题描述】:

我的数据库中有一个表,其中每一行都描述了一个时间表。例如:

ID   |  CODE   |   DAY    |   TIME
___________________________________
1        1          Mon       8
2        27         Wed       15

也就是说,每周一早上8点,调用代码1对应的函数。每周三下午3点,调用代码27对应的函数等

在 Android 中,在适当的时间调用所有这些任务的正确方法是什么?我已经看过 AlarmManager 和 JobScheduler,但我不知道哪一个更适合用于这样的事情。

我不需要非常精确的时间(让事件从指定时间触发 +/- 几秒甚至几分钟并不是什么大不了的事),但我确实需要它们尽可能触发。

【问题讨论】:

    标签: java android task alarmmanager job-scheduling


    【解决方案1】:

    Alarm Manager 将更适合作为您尝试根据创建警报的要求进行映射的一种方式或另一种方式。

    【讨论】:

    • 我是否需要为每个计划创建 PendingIntents,启动/停止每个 Activity 等?
    • 由于您正在使用另一个应用程序,即警报管理器来执行任务,所以是的,您必须授予他们权限,即 PendingIntents。
    • 我的意思是你必须在数据库中的每行使用一个 PendingIntent,我是否必须在每个 Activity 中启动/停止每一个?
    • 您可以添加一个侦听器,只要在 db 中添加新行,AlarmManager 就应该完成它的工作。是的,您必须在每项活动中开始/停止。
    【解决方案2】:

    如果您只需要在没有网络或费用检查的情况下触发事件,Alarm Manager 是轻量级且有效的解决方案。

    【讨论】:

      【解决方案3】:

      您可以尝试使用此库来快速实施警报管理器。

      https://android-arsenal.com/details/1/4755

      【讨论】:

        【解决方案4】:

        将 AlarmManager 与 setExactAndAllowWhileIdle 一起使用

        请注意,在 marshmallow 及更高版本上,使用 AlarmManager 计划的任务可能会因Doze 而延迟。获得准确时间的唯一方法是使用setAlarmClock,它可能会在某些系统的状态栏中显示闹钟图标。

        【讨论】:

          猜你喜欢
          • 2012-10-25
          • 1970-01-01
          • 2010-12-01
          • 1970-01-01
          • 2016-12-17
          • 1970-01-01
          • 2021-02-12
          • 2012-08-19
          • 1970-01-01
          相关资源
          最近更新 更多