aboutsummaryrefslogtreecommitdiff
path: root/work/workmanager/src/main/java/androidx/work/impl/Schedulers.java
diff options
context:
space:
mode:
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.java45
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);
+ }
}
}