我没有找到有关此主题的任何内容,但是我很好奇您的建议或“最佳实践”关于何时设置规则来安排任务?例如,如果我必须安排一个同步作业,只要应用程序运行,它就应该始终存在,那么
new JobRequest.Builder("...")..
.build()
.schedule()
叫做?
谢谢
我没有找到有关此主题的任何内容,但是我很好奇您的建议或“最佳实践”关于何时设置规则来安排任务?例如,如果我必须安排一个同步作业,只要应用程序运行,它就应该始终存在,那么
new JobRequest.Builder("...")..
.build()
.schedule()
叫做?
谢谢
扩展 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();
}
}
这将防止安排多个作业
您应该创建 JobCreator 它将像这样实例化您的 Job 类:
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();
}
}