【发布时间】:2021-05-22 10:41:57
【问题描述】:
在我的应用程序中,我设置了一个定期作业,该作业设置为每 30 分钟运行一次。 第一次作业运行发生在我安排定期作业时,这在我的情况下是不需要的。 我想要的是跳过第一次运行,以便在 30 多分钟后第一次运行。
关于如何解决这个问题,我的两个想法是要么让它在前 30 分钟内不运行(某种延迟),要么在有机会开始之前将第一个作业运行标记为已完成。
不幸的是,我在JobInfo 中没有找到任何可以让我做任何这些的方法。
另一个可以满足我需求的解决方法是以某种方式将作业限制为仅在应用程序处于后台时发生。它并不能完全解决问题,但在我的情况下它可以作为一种解决方法。
以下是我当前用于安排定期作业的代码:
private void scheduleJob() {
ComponentName componentName = new ComponentName(this, myRecurringTask.class);
JobInfo info = new JobInfo.Builder(JOB_ID, componentName)
.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)
.setPersisted(true)
.setPeriodic(1800000)
.build();
JobScheduler scheduler = (JobScheduler) getSystemService(JOB_SCHEDULER_SERVICE);
scheduler.schedule(info);
}
我希望有人遇到过同样的情况并可以帮助我解决它...谢谢!
【问题讨论】:
-
初始延迟在
WorkManager:stackoverflow.com/questions/51229826/…中可用 -
感谢@SamChen 的回复。我以前从未听说过
WorkManager,我只是在检查它的功能集与JobScheduler相比,它确实带来了很多改进,同时仍然向后兼容。如果我找不到JobScheduler的任何解决方案,我将迁移到WorkManager,我肯定会将它用于新应用程序!
标签: android delay android-jobscheduler periodic-task