Android JobScheduler。我可以每15秒调度一次作业吗?

3

我的代码可以工作。但我不确定它是否适用于所有设备和情况。

我可以这样使用JobScheduler吗?

开始方法:

public static void schedule() {
    JobScheduler scheduler = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);

    JobInfo job = new JobInfo.Builder(1, new ComponentName(context, MySchedulerService.class))
            .setMinimumLatency(15000)
            .build();

    scheduler.schedule(job);
}

服务:

public static class MySchedulerService extends JobService {

    public boolean onStartJob(JobParameters params) {
        schedule();
       /*   Business code   */
        stopSelf();
        return false;
    }

    public boolean onStopJob(JobParameters params) {
        return false;
    }
}
1个回答

4

我能够每15秒调度一次作业吗?

不行。两次调度之间的最短时间约为15分钟。您可以使用getMinPeriodMillis()轻松查询此信息。

注意:

在调度作业时尝试声明比这更小的周期将导致仍然是周期性的作业,但将以此有效周期运行。

对于setMinimumLatency,根据文档

在此之前毫秒内,此作业不会被考虑执行。

这并不意味着作业将在15秒后立即执行,并且从Android N开始,在进入Doze模式第一阶段时可能不可靠。


我知道这个。因此,我使用了这个技巧。我每次都开始一个新任务。问题是,它可靠吗? - Zeon
我认为当你尝试设置超过15分钟的时间段时,它会起作用。但在我的情况下,我安排了新任务。 - Zeon
谢谢你的回答,这对我来说真的很有帮助。关于setMinimumLatency,在我的情况下并不重要,只要Doze不完全杀死该任务即可。 - Zeon
@DmitriyKholin 没问题。Doze模式会推迟作业而不会终止它。只是不能保证您的作业每15秒执行一次。如果您觉得答案有帮助,请记得将其标记为已接受,以便其他人也可以受益。 - Sagar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接