我没有找到关于这个主题的任何东西,但是我很好奇您的建议或“最佳实践”是关于的,当设置规则来安排任务?例如,如果我必须安排一个同步作业,只要应用程序运行,它应该始终在那里,那么
new JobRequest.Builder("...")..
.build()
.schedule()被召唤吗?
谢谢
发布于 2017-05-25 16:47:51
您应该创建JobCreator,它将像下面这样实例化您的作业类:
public class MyJobCreator implements JobCreator {
@Override
public Job create(String tag) {
if (MyJob.TAG.equals(tag)) {
return new MyJob();
}
return null;
}
}并在Application.onCreate()中初始化
JobManager.create(this).addJobCreator(new MyJobCreator());
MyJob.scheduleJob();MyJob可能如下所示:
public class MyJob extends Job {
public static final String TAG = "my_job_tag";
@Override
@NonNull
protected Result onRunJob(Params params) {
Intent i = new Intent(getContext(), MyService.class);
getContext().startService(i);
return Result.SUCCESS;
}
public static void scheduleJob() {
new JobRequest.Builder(MyJob.TAG)
.setPeriodic(60_000L) // 1 minute
.setRequiredNetworkType(JobRequest.NetworkType.ANY)
.setPersisted(true)
.setUpdateCurrent(true)
.setRequirementsEnforced(true)
.build()
.schedule();
}
}发布于 2018-06-07 10:44:43
扩展shmakova的回答时,如果同步作业已经按如下方式调度,则可能需要添加一个条件:
public static void scheduleJob() {
if (JobManager.instance().getAllJobRequestsForTag(MyJob.TAG).isEmpty()) {
new JobRequest.Builder(MyJob.TAG)
.setPeriodic(900_000L)
.setRequiredNetworkType(JobRequest.NetworkType.ANY)
.setPersisted(true)
.setUpdateCurrent(true)
.setRequirementsEnforced(true)
.build()
.schedule();
}
}这将防止调度多个作业。
https://stackoverflow.com/questions/43983473
复制相似问题