Android 如何使用 JobDispatcher api 每晚安排任务?
Android How schedule task for every night with JobDispatcher api?
我必须每晚从 Web 服务器下载 json 响应,以前我使用 AlarmManager
来安排任务,但我认为对于这种情况 JobDispatcher
很棒,因为如果网络可用,它会自动执行任务,所以我不必管理这种 stuf.But 我发现了很多 JobDispatcher
和 JobScheduler
的例子,它们都安排了一个简单的工作或计划延迟一段时间,但与我的要求无关,
如果有人对此有所了解,请提供帮助或提供与此相关的任何 link,这将非常有帮助。
更新
1. 如何让它每天晚上都工作,因为目前它只将闹钟设置为午夜一次,如何让它每晚重复一次晚上同一时间 ?
这就是您需要如何安排基于时间的作业
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);
我建议您将 JobDispatcher 设置为在下一个午夜开始,即将开始时间设置为现在和下一个午夜之间的差值。一旦启动,您可以让它启动一个 24 小时后开始的新作业,即该服务将启动一个新作业,开始时间设置为 24 小时,并使该作业重复出现。
我必须每晚从 Web 服务器下载 json 响应,以前我使用 AlarmManager
来安排任务,但我认为对于这种情况 JobDispatcher
很棒,因为如果网络可用,它会自动执行任务,所以我不必管理这种 stuf.But 我发现了很多 JobDispatcher
和 JobScheduler
的例子,它们都安排了一个简单的工作或计划延迟一段时间,但与我的要求无关,
如果有人对此有所了解,请提供帮助或提供与此相关的任何 link,这将非常有帮助。
更新
1. 如何让它每天晚上都工作,因为目前它只将闹钟设置为午夜一次,如何让它每晚重复一次晚上同一时间 ?
这就是您需要如何安排基于时间的作业
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);
我建议您将 JobDispatcher 设置为在下一个午夜开始,即将开始时间设置为现在和下一个午夜之间的差值。一旦启动,您可以让它启动一个 24 小时后开始的新作业,即该服务将启动一个新作业,开始时间设置为 24 小时,并使该作业重复出现。