【问题标题】:Is there a way to run a task once the same day and every consequent day at the specified time?有没有办法在指定时间在同一天和之后的每一天运行一次任务?
【发布时间】:2017-07-20 14:36:04
【问题描述】:

有没有办法在指定的时间在同一天和之后的每一天运行一次任务?我正在使用一个名为“android-job”的库,因为即使在设备重新启动后它也会保留预定的作业。我一直在努力使这个库适用于我的用例,但没有运气。

注意:最终目标是每天在指定时间启动和停止后台服务。例如,我想在晚上 8 点停止我的服务并在早上 8 点重新启动它)。

目前,我的代码如下所示:

Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 20);
calendar.set(Calendar.MINUTE, 0);

int hour = calendar.get(Calendar.HOUR_OF_DAY);
int minute = calendar.get(Calendar.MINUTE);

long startMs = TimeUnit.MINUTES.toMillis(60 - minute) + TimeUnit.HOURS.toMillis((24 - hour) % 24);
long endMs = startMs + TimeUnit.MINUTES.toMillis(5);


int jobId = new JobRequest.Builder(TAG)
        .setExecutionWindow(startMs, endMs)
        .setPersisted(true)
        .setUpdateCurrent(updateCurrent)
        .build()
        .schedule();`

控制台输出:

jobInfo success, request{id=11, tag=job_demo_tag}, start 05:00:00, end 05:05:00, reschedule count 0

【问题讨论】:

    标签: android android-service scheduled-tasks android-jobscheduler android-job


    【解决方案1】:

    您可以为此探索 AlarmManager。它可用于您希望在指定时间执行代码的情况,即使您的应用未运行。

    https://developer.android.com/reference/android/app/AlarmManager.html

    【讨论】:

    • 是的,在尝试使用该库之前,我已经探索了 AlarmManager。据我所知,预定的警报不会在设备重启后继续存在。这就是我想使用图书馆的原因
    • 我认为这可以通过实现一个引导接收器来实现。
    • 我明白了。例如,如果我安排一个任务在特定时间调用我的接收器(以及接收器执行任务),并且如果设备重新启动,我的接收器接收意图并再次安排任务?这就是你要刺穿的吗?这可能行得通。
    • 是的。这应该有效。我们在一个类似(不完全)的用例中使用了这个逻辑。
    • 感谢您的建议。我将测试这个逻辑,看看它是否适用于我的用例。我希望这个逻辑能够奏效,因为我花了很多时间试图为我的应用程序实现这个用例:)
    猜你喜欢
    • 1970-01-01
    • 2012-01-26
    • 2015-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-26
    相关资源
    最近更新 更多