0

我没有找到有关此主题的任何内容,但是我很好奇您的建议或“最佳实践”关于何时设置规则来安排任务?例如,如果我必须安排一个同步作业,只要应用程序运行,它就应该始终存在,那么

new JobRequest.Builder("...")..
  .build()
  .schedule()

叫做?

谢谢

4

2 回答 2

1

扩展 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();
    }
}

这将防止安排多个作业

于 2018-06-07T10:44:43.247 回答
1

您应该创建 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();
    }
}
于 2017-05-25T16:47:51.710 回答