为了让事情从一开始就清楚,这里是应用程序所需的流程:
选择带有日/小时/分钟的精确日期 ->Job
创建一个新日期并安排时间FirebaseJobDispatcher
->job
在正确的日期准确触发,并定期运行(例如,周期为 1-2 秒) 定义是否job
需要的代码再次运行。如果不需要再次运行,则确定结束,否则,重新运行。此外,job
应该有一个“持续时间”(通常为 60 秒),无论job
.
到目前为止,我对三件事感到困惑:
- 触发窗口似乎完全不可靠,
job
大约在它想要的时候运行 - 我应该使用
FirebaseJobDispatcher#setRecurring
还是jobFinished(job, true);
在服务内部? - 有时,
setRecurring(boolean)
设置为false
, 以及jobFinished(job, false);
, 作业仍然运行
也许我应该AlarmManager
改用?但它似乎是新的方式 FirebaseJobDispatche
,所以我不知道。
这是一些代码
服务:
@Override
public boolean onStartJob(final JobParameters job) {
new Thread(new Runnable() {
@Override
public void run() {
simulateBackgroundTask(job);
}
}).start();
return true;
}
private void simulateBackgroundTask(JobParameters job) {
try {
Log.d(TAG, "completeJob: " + "jobStarted --------------------");
//request server or db
Thread.sleep(2000);
Log.d(TAG, "completeJob: " + "jobFinished --------------------");
//shoudRunAgain is from the result of the request
if(shouldRunAgain)
jobFinished(job, true);
else
jobFinished(job, false);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
@Override
public boolean onStopJob(JobParameters job) {
return false;
}
活动
FirebaseJobDispatcher dispatcher = new FirebaseJobDispatcher(new GooglePlayDriver(App.getContext()));
Job job = dispatcher.newJobBuilder()
.setLifetime(Lifetime.FOREVER)
.setService(SearchService.class)
.setTag("SearchService")
.setRecurring(true)
.setTrigger(Trigger.executionWindow(startDate,endDate))
.setConstraints(Constraint.ON_ANY_NETWORK)
.build();
dispatcher.mustSchedule(job);
欢迎任何建议或解决方案,谢谢