diff options
Diffstat (limited to 'work/workmanager/src/main/java/androidx/work/impl/Schedulers.java')
-rw-r--r-- | work/workmanager/src/main/java/androidx/work/impl/Schedulers.java | 45 |
1 files changed, 21 insertions, 24 deletions
diff --git a/work/workmanager/src/main/java/androidx/work/impl/Schedulers.java b/work/workmanager/src/main/java/androidx/work/impl/Schedulers.java index 4944549d6fa..041f7880ce8 100644 --- a/work/workmanager/src/main/java/androidx/work/impl/Schedulers.java +++ b/work/workmanager/src/main/java/androidx/work/impl/Schedulers.java @@ -65,41 +65,38 @@ public class Schedulers { @NonNull Configuration configuration, @NonNull WorkDatabase workDatabase, List<Scheduler> schedulers) { - - WorkSpecDao workSpecDao = workDatabase.workSpecDao(); - List<WorkSpec> eligibleWorkSpecs = - workSpecDao.getEligibleWorkForScheduling( - configuration.getMaxSchedulerLimit()); - scheduleInternal(workDatabase, schedulers, eligibleWorkSpecs); - } - - private static void scheduleInternal( - @NonNull WorkDatabase workDatabase, - List<Scheduler> schedulers, - List<WorkSpec> workSpecs) { - - if (workSpecs == null || schedulers == null) { + if (schedulers == null || schedulers.size() == 0) { return; } - long now = System.currentTimeMillis(); WorkSpecDao workSpecDao = workDatabase.workSpecDao(); - // Mark all the WorkSpecs as scheduled. - // Calls to Scheduler#schedule() could potentially result in more schedules - // on a separate thread. Therefore, this needs to be done first. + List<WorkSpec> eligibleWorkSpecs; + workDatabase.beginTransaction(); try { - for (WorkSpec workSpec : workSpecs) { - workSpecDao.markWorkSpecScheduled(workSpec.id, now); + eligibleWorkSpecs = workSpecDao.getEligibleWorkForScheduling( + configuration.getMaxSchedulerLimit()); + if (eligibleWorkSpecs != null && eligibleWorkSpecs.size() > 0) { + long now = System.currentTimeMillis(); + + // Mark all the WorkSpecs as scheduled. + // Calls to Scheduler#schedule() could potentially result in more schedules + // on a separate thread. Therefore, this needs to be done first. + for (WorkSpec workSpec : eligibleWorkSpecs) { + workSpecDao.markWorkSpecScheduled(workSpec.id, now); + } } workDatabase.setTransactionSuccessful(); } finally { workDatabase.endTransaction(); } - WorkSpec[] eligibleWorkSpecsArray = workSpecs.toArray(new WorkSpec[0]); - // Delegate to the underlying scheduler. - for (Scheduler scheduler : schedulers) { - scheduler.schedule(eligibleWorkSpecsArray); + + if (eligibleWorkSpecs != null && eligibleWorkSpecs.size() > 0) { + WorkSpec[] eligibleWorkSpecsArray = eligibleWorkSpecs.toArray(new WorkSpec[0]); + // Delegate to the underlying scheduler. + for (Scheduler scheduler : schedulers) { + scheduler.schedule(eligibleWorkSpecsArray); + } } } |