0

我每天晚上都必须从网络服务器下载 json 响应,以前我用它AlarmManager来安排任务,但我认为这种情况JobDispatcher很好,因为如果网络可用,它会自动执行任务,所以我不必管理这种 stuf .但是我发现了很多例子,JobDispatcherJobScheduler所有这些例子中,一个简单的工作被安排或安排了一些时间延迟,但与我的要求没有任何关系,如果有人对此有任何想法,请帮助或提供与此相关的任何链接,它会很有帮助。

更新

1. 如何让它每晚工作,因为目前它只设置一次午夜闹钟,如何让它在每晚的同一时间重复?

4

2 回答 2

5

这就是您需要安排基于时间的作业的方式

FirebaseJobDispatcher jobDispatcher = new FirebaseJobDispatcher(
                new GooglePlayDriver(this));

Calendar now = Calendar.getInstance();
Calendar midNight = Calendar.getInstance();
midNight.set(Calendar.HOUR, 12);
midNight.set(Calendar.MINUTE, 0);
midNight.set(Calendar.SECOND, 0);
midNight.set(Calendar.MILLISECOND, 0);
midNight.set(Calendar.AM_PM, Calendar.AM);

long diff = now.getTimeInMillis() - midNight.getTimeInMillis();

if (diff < 0) {
    midNight.add(Calendar.DAY_OF_MONTH, 1);
    diff = midNight.getTimeInMillis() - now.getTimeInMillis();
}

int startSeconds = (int) (diff / 1000); // tell the start seconds
int endSencods = startSeconds + 300; // within Five minutes 

Job networkJob = jobDispatcher.newJobBuilder()
        .setService(NetworkJob.class)
        .setTag(NetworkJob.ID_TAG)
        .setRecurring(true)
        .setTrigger(Trigger.executionWindow(startSeconds, endSencods))
        .setLifetime(Lifetime.FOREVER)
        .setReplaceCurrent(true)
        .setConstraints(Constraint.ON_ANY_NETWORK)
        .build();

jobDispatcher.schedule(networkJob);
于 2017-08-24T05:02:38.147 回答
1

我建议您将 JobDispatcher 设置为在下一个午夜开始,即将开始时间设置为现在和下一个午夜之间的时间差。一旦它启动,您可以让它启动一个在 24 小时内启动的新作业,即该服务将启动一个新的作业,开始时间设置为 24 小时,并使其重复。

于 2018-11-03T20:49:11.850 回答