0

我正在使用firebase作业调度程序,并且正在编写一个简单的定期作业,当有互联网连接时,它应该每分钟左右运行一次。我知道作业不能完全按时运行,因为他们想延长电池寿命并允许其他应用程序也能正常工作,但延迟太长了。它可以达到 25 分钟,这与想要的 1 分钟相比太长了。有没有办法让定期作业至少每 3-5 分钟运行一次?

Thix 是我编写周期性任务的方式:

  FirebaseJobDispatcher dispatcher = new FirebaseJobDispatcher(new GooglePlayDriver(MainActivity.this));

        Job myJob = dispatcher.newJobBuilder()

                // the JobService that will be called
                .setService(MyJobService.class)
                // uniquely identifies the job
                .setTag("my-unique-tag")
                .setRecurring(true)
                .setLifetime(Lifetime.FOREVER)
                // start between 0 and 10 seconds from now
                .setTrigger(Trigger.executionWindow(0, 10))
                .setReplaceCurrent(true)
                .setRetryStrategy(RetryStrategy.DEFAULT_LINEAR)
                // constraints that need to be satisfied for the job to run
                .setConstraints(
                        // only run on an unmetered network
                        Constraint.ON_UNMETERED_NETWORK
                )
                .build();

        dispatcher.mustSchedule(myJob);
4

2 回答 2

0

如果您希望MyJobService每分钟都运行一次,则需要更改此设置...

.setTrigger(Trigger.executionWindow(0, 10))

……到这……

.setTrigger(Trigger.executionWindow(60, 60))

您之前所拥有的是告诉FirebaseJobDispatcher每 0-10 秒触发一次您的工作。通过设置一个窗口,60,60您可以告诉它大约每 60 秒触发一次您的工作。您也可以将其更改为55,65或其他一些变体,但我发现60,60对我有用。

于 2017-07-24T10:02:33.413 回答
0

我只是遇到了同样的问题:我的工作计划为 60 到 120 秒,但在我的工作的第一次和第二次运行之间大约需要 6 分钟。

我只是错过了jobFinished(JobParameters params, boolean needsReschedule)在作业触发的最后一个函数的最后一行之后立即调用。添加这个解决了我的问题。

希望有帮助。

于 2018-07-05T19:35:44.697 回答