我正在使用Firebase Job Dispatcher,并且正在编程一个简单的周期性作业,该作业应在有Internet连接时每分钟左右运行。我知道工作不会准确地运行,因为他们想改善电池寿命并允许其他应用程序工作,但是延迟太长了。它可以达到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);
如果您希望MyJobService
每分钟运行您需要更改此问题...
.setTrigger(Trigger.executionWindow(0, 10))
...对此...
.setTrigger(Trigger.executionWindow(60, 60))
您之前的内容是告诉FirebaseJobDispatcher
每0-10秒触发您的工作。通过将60,60
的窗口放入大约每60秒钟的窗口。您也可以将其更改为55,65
或其他一些变体,但我发现60,60
对我有用。
我只是遇到了同样的问题:我的工作安排了60至120秒,但在我的第一轮和第二次工作之间,大约6分钟。
我只是错过了在作业触发的最后一个函数的最后一行之后立即致电jobFinished(JobParameters params, boolean needsReschedule)
。在我的情况下,添加此问题解决了问题。
希望会有所帮助。