JobService仅运行一次可以立即运行吗?

时间:2019-02-26 03:29:09

标签: android android-jobscheduler

JobService仅运行一次可以立即运行吗?

我目前正在测试JobService, 我使用以下代码

            JobScheduler jobScheduler = getSystemService(JobScheduler.class);
            jobScheduler.schedule(new JobInfo.Builder(1,
                    new ComponentName(getApplicationContext(), SyncJobLollipop.class))
                    .setMinimumLatency(1)
                    .setOverrideDeadline(1)
                    .build());

但是它立即运行,这是因为我不使用定期吗? 还是可以直接运行? 我想用它代替线程。

我可以在完成后再次运行它吗?

1 个答案:

答案 0 :(得分:3)

  

JobService仅运行一次可以立即运行吗?

当您使用JobScheduler API时,它会向您保证在完成条件时它将运行JobService,但不一定立即执行。尽管如果您的应用程序位于前台(用户正在使用它),则它将更快地运行JobService。我看到一些用户从未使用过的应用程序在运行该作业时会有很大的延迟(该作业只会执行一次)。

  

但是它立即运行,这是因为我不定期使用吗?还是可以直接运行?

将作业安排为定期作业时,默认的最小运行时间为15分钟(不会在15分钟以内安排定期作业),而普通作业则没有此限制。但这并不意味着在满足条件后立即执行作业,正如我之前解释的那样。

  

我可以在完成后再次运行它吗?

完成后,您可以重新安排JobService的时间。我已经实现了,并且效果很好。但是,如果您大量安排此JobService,则系统将延迟您的作业执行。

定期作业不需要重新安排时间,因为在预定时间后将要再次执行该作业。

按照我的解决方案草稿:

class MyJobService extends JobService {
    public boolean onStartJob(JobParameters params)
        /* Here is run my task */
        scheduleJob(); // 
        return false;
    }

    public static void scheduleJob() {
        /* code to schedule this job service. */
    }
}