Android 在满足条件时运行定期作业?

Android 在满足条件时运行定期作业?,android,job-scheduling,recurring-events,android-jobscheduler,firebase-job-dispatcher,Android,Job Scheduling,Recurring Events,Android Jobscheduler,Firebase Job Dispatcher,我正在使用以下代码使作业在每次有可用的internet时运行。此外,我希望在触发服务(由于可用连接)后,只要有internet,我希望该服务定期(每30秒)继续运行,然后当连接不再可用时,该服务应停止,并仅在下一次有internet时恢复 FirebaseJobDispatcher jobDispatcher = new FirebaseJobDispatcher(new GooglePlayDriver(MainActivity.this));

我正在使用以下代码使作业在每次有可用的internet时运行。此外,我希望在触发服务(由于可用连接)后,只要有internet,我希望该服务定期(每30秒)继续运行,然后当连接不再可用时,该服务应停止,并仅在下一次有internet时恢复

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

                        .setTag("JobService")

                        .setRecurring(true)

                        .setLifetime(Lifetime.FOREVER)
                        .setService(JobService.class)

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

                        .setReplaceCurrent(true)
                        .setRetryStrategy(RetryStrategy.DEFAULT_EXPONENTIAL);    

                builder.addConstraint(Constraint.ON_UNMETERED_NETWORK);
                jobDispatcher.mustSchedule(builder.build());

我想让JobService自己安排下一次运行(30秒后),时间到了之后,测试是否有internet,然后确定,否则我将调用Onstop方法,但这并不是解决这个问题的正确方法。

您可以编写:
设置触发器(Trigger.executionWindow(30,40))
。说明:

或者对于executionWindow,规则是:

.setTrigger(Trigger.executionWindow(
                        INTERVAL_IN_SECONDS,
                        INTERVAL_IN_SECONDS + TIME_WINDOW_IN_SECONDS
                ))

参考资料:

很抱歉,我不明白我使用的命令:.setTrigger(Trigger.executionWindow(0,10))与您使用的.setTrigger(Trigger.executionWindow(INTERVAL_IN_秒,INTERVAL_IN_秒+TIME_WINDOW IN_秒))有什么不同我使用的方法是在作业第一次连接到internet时触发作业一次,下一次是在断开并再次连接之后,这不是我想要的行为,因为我希望只要用户仍然连接,它就会定期触发。你希望它每30秒定期运行一次,对吗?是的,我尝试使用setTrigger,但问题是它工作了3到4次,然后就停止了。我使用jobscheduler的效果要好得多,但考虑到它只适用于api>=21,而且firebase job dispatcher假定使用api>=21的job scheduler和alarm manager来模拟api的job scheduler行为,您是否尝试编写“setTrigger(Trigger.executionWindow(30,40))`?
.setTrigger(Trigger.executionWindow(
                        INTERVAL_IN_SECONDS,
                        INTERVAL_IN_SECONDS + TIME_WINDOW_IN_SECONDS
                ))