【发布时间】:2017-11-08 08:29:05
【问题描述】:
我正在实施 Firebase Jobdispatcher,触发时间在 10 到 20 秒之间。这是我安排工作的代码:
public static void scheduleCompatibleJob(Context context) {
FirebaseJobDispatcher dispatcher = new FirebaseJobDispatcher(new GooglePlayDriver(context));
Job myJob = dispatcher.newJobBuilder()
.setService(DataTrackerJobService.class) // the JobService that will be called
.setTag("api_trigger")
.setRecurring(true)
.setLifetime(Lifetime.FOREVER)
.setTrigger(Trigger.executionWindow(10, 20)) // 10 to 20 seconds
.setReplaceCurrent(true)
.setRetryStrategy(RetryStrategy.DEFAULT_LINEAR)
.setConstraints(Constraint.ON_ANY_NETWORK)
.build();
dispatcher.mustSchedule(myJob);
}
还有服务类:
public class DataTrackerJobService extends JobService {
@Override
public boolean onStartJob(final JobParameters job) {
Log.e("start job", "started " + job);
(new Handler()).postDelayed(new Runnable() {
@Override
public void run() {
Log.e("handler", "run");
jobFinished(job, true);
}
}, 2000);
return true;
}
@Override
public boolean onStopJob(JobParameters job) {
Log.e("stop job", "stopped " + job);
return false;
}
}
Job dispatcher 正在运行,但 logcat 中的时间不正确。随着工作的每一次重新安排,时间差距不断增加,从来没有在 10 到 20 秒之间。
06-07 11:19:16.429 26174-26174/com.example.jobdispatcher E/开始工作:开始 com.firebase.jobdispatcher.JobInvocation@f4250de4 06-07 11:19:18.432 26174-26174/com.example.jobdispatcher E/handler: 运行 06-07 11:20:16.436 26174-26174/com.example.jobdispatcher E/开始工作:开始 com.firebase.jobdispatcher.JobInvocation@f16ceb31 06-07 11:20:18.438 26174-26174/com.example.jobdispatcher E/handler: 运行 06-07 11:21:58.519 26174-26174/com.example.jobdispatcher E/开始工作:开始 com.firebase.jobdispatcher.JobInvocation@f4c635cd 06-07 11:22:00.520 26174-26174/com.example.jobdispatcher E/handler: 运行 06-07 11:23:40.602 26174-26174/com.example.jobdispatcher E/开始工作:开始 com.firebase.jobdispatcher.JobInvocation@f15f8e29 06-07 11:23:42.605 26174-26174/com.example.jobdispatcher E/handler: 运行 06-07 11:25:52.642 26174-26174/com.example.jobdispatcher E/开始工作:开始 com.firebase.jobdispatcher.JobInvocation@f48c1045 06-07 11:25:54.644 26174-26174/com.example.jobdispatcher E/handler: 运行 06-07 11:28:52.652 26174-26174/com.example.jobdispatcher E/开始工作:开始 com.firebase.jobdispatcher.JobInvocation@f3b49821 06-07 11:28:54.655 26174-26174/com.example.jobdispatcher E/handler: 运行 06-07 11:32:04.688 26174-26174/com.example.jobdispatcher E/开始工作:开始 com.firebase.jobdispatcher.JobInvocation@e7f3c1bd 06-07 11:32:06.690 26174-26174/com.example.jobdispatcher E/handler: 运行
请在 logcat 中检查时间。指导我在哪里出错,或者它应该只以这种方式工作?基本上我想在 24 小时的时间间隔内实现它,但我想知道这是否可行,然后在触发时间中指定的时间的两倍后调用一次作业。
【问题讨论】:
标签: android firebase job-scheduling firebase-job-dispatcher