Firebase JobDispatcher - 立即开始并重复执行

3

根据这个例子,我可以使用Trigger.NOW或0,0的时间来立即启动作业:

Bundle myExtrasBundle = new Bundle();
myExtrasBundle.putString("some_key", "some_value");

Job myJob = dispatcher.newJobBuilder()
    // the JobService that will be called
    .setService(MyJobService.class)
    // uniquely identifies the job
    .setTag("my-unique-tag")
    // one-off job
    .setRecurring(false)
    // don't persist past a device reboot
    .setLifetime(Lifetime.UNTIL_NEXT_BOOT)
    // start between 0 and 60 seconds from now
    .setTrigger(Trigger.executionWindow(0, 60))
    // don't overwrite an existing job with the same tag
    .setReplaceCurrent(false)
    // retry with exponential backoff
    .setRetryStrategy(RetryStrategy.DEFAULT_EXPONENTIAL)
    // constraints that need to be satisfied for the job to run
    .setConstraints(
        // only run on an unmetered network
        Constraint.ON_UNMETERED_NETWORK,
        // only run when the device is charging
        Constraint.DEVICE_CHARGING
    )
    .setExtras(myExtrasBundle)
    .build();

dispatcher.mustSchedule(myJob);

我的问题是:

我如何设置任务立即开始,但每[时间间隔](假设为15分钟)重复执行?


使用AlarmManager,并每15分钟启动此任务。 - Fakher
我们实际上正在远离Alarm Manager。 - Psest328
1个回答

0

为了让你的工作定期重复执行,请调用以下两个方法:

.setRecurring(true) //true mean repeat it
.setTrigger(Trigger.executionWindow(start, end))

start:被称为windowStart,是作业应该被认为有资格运行的最早时间(以秒为单位)。从作业被调度时开始计算(对于新作业)。

end:被称为windowEnd,在理想情况下,作业应该在其中运行的最晚时间(以秒为单位)。以与windowStart相同的方式计算。


1
我知道。但如果我们将它设置为15分钟,如何让它立即开始并每15分钟重复一次?现在它会等待15分钟才运行第一次。 - Psest328
创建一个非重复的任务,使用AlarmManager启动,并设置执行窗口为(0, 0)。在15分钟后,将其变为重复任务,并设置执行窗口为(0, 15)。 - Fakher

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接