有没有办法让周期性任务有更短的延迟?

时间:2017-03-04 20:55:36

标签: android android-service periodic-task firebase-job-dispatcher

我正在使用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);

2 个答案:

答案 0 :(得分:0)

如果您希望每分钟运行MyJobService,则需要更改此内容...

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

......对此...

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

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

答案 1 :(得分:0)

我遇到了同样的问题:“我的工作”排定为60到120秒,但在第一次和第二次工作之间大约需要6分钟。

我只是错过了作业触发的最后一个函数的最后一行之后立即调用mysql2。添加这个解决了我的问题。

希望有帮助。