【发布时间】:2017-08-15 11:45:29
【问题描述】:
我正在尝试使用 android 作业调度程序来安排作业立即执行一次。
JobScheduler jobScheduler = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
jobScheduler.cancel(1);
PersistableBundle bundle = new PersistableBundle();
bundle.putInt(JobFlags.KEY_PERIODIC_SYNC_JOB, JobFlags.JOB_TYPE_INITIAL_FETCH);
jobScheduler.schedule(new JobInfo.Builder(1,
new ComponentName(context, SyncJobLollipop.class))
.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)
.setExtras(bundle)
.setMinimumLatency(10)
.setOverrideDeadline(24 * 3600 * 1000)
.build());
但它运行了大约 3 4 次。这里有什么问题?
这是作业类本身:
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
public class SyncJobLollipop extends JobService implements JobFinishedListener {
@Inject
SyncJobBackend jobBackend;
private JobParameters jobParameters;
@Override
public boolean onStartJob(JobParameters jobParameters) {
((MyApplication)getApplication()).getAppComponent().inject(this);
this.jobParameters = jobParameters;
PersistableBundle bundle = jobParameters.getExtras();
int type = bundle.getInt(JobFlags.KEY_PERIODIC_SYNC_JOB);
jobBackend.onStartJob(type, this);
return true;
}
@Override
public boolean onStopJob(JobParameters jobParameters) {
jobBackend.onStopJob();
return false;
}
@Override
public void onJobFinished(boolean success) {
jobFinished(jobParameters, !success);
}
}
P.S.:我已经检查过我每次都使用错误值完成作业。
【问题讨论】:
-
你确定
jobScheduler.schedule只被调用一次吗? -
是的。它只被调用一次。我在 Android N 上。
-
@dumb_terminal 你的包中有
JobFlags.KEY_PERIODIC_SYNC_JOB,我猜它是periodic -
我同意这个名字很混乱,但这与让它定期无关,所有与时间表相关的代码都在这里发布。 @Merka
标签: android android-jobscheduler