WorkManager

Mit der WorkManager API können zurückgestellte, asynchrone Aufgaben ganz einfach geplant werden. die zuverlässig ausgeführt werden müssen. Mit diesen APIs können Sie eine Aufgabe erstellen und an die WorkManager, der ausgeführt wird, wenn die Arbeitsbeschränkungen erfüllt sind.
Letzte Aktualisierung Stabile Version Releasekandidat Beta-Ausgabe Alpha-Release
7. August 2024 2.9.1 - - 2.10.0-alpha02

Abhängigkeiten deklarieren

Um eine Abhängigkeit von WorkManager hinzuzufügen, müssen Sie das Maven-Repository von Google Ihrem Projekt:

Fügen Sie der Datei build.gradle die Abhängigkeiten für die Artefakte hinzu, die Sie benötigen Ihre App oder Ihr Modul:

Groovig

dependencies {
    def work_version = "2.9.1"

    // (Java only)
    implementation "androidx.work:work-runtime:$work_version"

    // Kotlin + coroutines
    implementation "androidx.work:work-runtime-ktx:$work_version"

    // optional - RxJava2 support
    implementation "androidx.work:work-rxjava2:$work_version"

    // optional - GCMNetworkManager support
    implementation "androidx.work:work-gcm:$work_version"

    // optional - Test helpers
    androidTestImplementation "androidx.work:work-testing:$work_version"

    // optional - Multiprocess support
    implementation "androidx.work:work-multiprocess:$work_version"
}

Kotlin

dependencies {
    val work_version = "2.9.1"

    // (Java only)
    implementation("androidx.work:work-runtime:$work_version")

    // Kotlin + coroutines
    implementation("androidx.work:work-runtime-ktx:$work_version")

    // optional - RxJava2 support
    implementation("androidx.work:work-rxjava2:$work_version")

    // optional - GCMNetworkManager support
    implementation("androidx.work:work-gcm:$work_version")

    // optional - Test helpers
    androidTestImplementation("androidx.work:work-testing:$work_version")

    // optional - Multiprocess support
    implementation("androidx.work:work-multiprocess:$work_version")
}

Informationen zur Verwendung von Kotlin-Erweiterungen finden Sie in der ktx-Dokumentation.

Weitere Informationen zu Abhängigkeiten finden Sie unter Build-Abhängigkeiten hinzufügen.

Feedback

Dein Feedback hilft uns, Jetpack zu verbessern. Teilen Sie uns mit, wenn Sie neue Ausgaben entdecken oder zur Verbesserung dieser Bibliothek. In der bestehende Probleme in dieser Bibliothek, bevor Sie eine neue erstellen. So können Sie zu einem vorhandenen Problem abstimmen: indem Sie auf die Sternschaltfläche klicken.

Neues Problem erstellen

Weitere Informationen finden Sie in der Dokumentation zur Problemverfolgung. .

Version 2.10

Version 2.10.0-alpha02

17. April 2024

androidx.work:work-*:2.10.0-alpha02 wurde veröffentlicht. Version 2.10.0-alpha02 enthält diese Commits.

API-Änderungen

  • Es wurde die Möglichkeit hinzugefügt, Trace-Spans über eine konfigurierbare @RestrictTo Tracer in WorkManager auszugeben. (I17d7f, b/260214125)
  • Configuration.workerCoroutineContext wurde zur Steuerung des Dispatchers hinzugefügt, wo CoroutineWorker ausgeführt wird. Es hilft, die Nutzung von Dispatchers.Default in WorkManager vollständig zu vermeiden. (Icd1b7)
  • Benutzerdefinierte Ausnahme-Handler für Worker hinzufügen (Ib1b74, b/261190695)
  • OneTimeWorkRequest.Builder und PeriodicWorkRequest.Builder können jetzt mit KClass anstelle von Class erstellt werden: val request = OneTimeWorkRequest.Builder(Worker::class).setConstraints(...).build() (Ib55f6)
  • WorkManager Klasse wurde zu Kotlin migriert. Methoden, die LiveData, ListenableFuture oder Flow zurückgeben, liefern jetzt korrekte Informationen zur Null-Zulässigkeit. Möglicherweise sind dafür Änderungen an der wenn die Annahmen zur Null-Zulässigkeit in diesem Code falsch waren. (If6757)

Version 2.10.0-alpha01

24. Januar 2024

androidx.work:work-*:2.10.0-alpha01 wurde veröffentlicht. Version 2.10.0-alpha01 enthält diese Commits.

Neue Funktionen

  • Entwickler können NetworkRequest als Einschränkung für einen Worker über die Methode Constraints.setRequiredNetworkRequest angeben. Dies ermöglicht eine genauere Kontrolle darüber, welches Netzwerk dieser Worker ausführen soll.

API-Änderungen

  • Eine Funktion zum Angeben von NetworkRequest als Einschränkung wird hinzugefügt. (Id98a1, b/280634452)

Version 2.9

Version 2.9.1

7. August 2024

androidx.work:work-*:2.9.1 wurde veröffentlicht. Version 2.9.1 enthält diese Commits.

Fehlerkorrekturen

  • Der Absturz wurde behoben, der durch WorkManager verursacht wurde, der versuchte, einen lang andauernden Worker (d.h. einen Worker im Vordergrund) neu zu starten, wenn für den Vordergrundtyp des Werks erforderliche Berechtigungen für Android 14 widerrufen wurden. (b/333957914)

Version 2.9.0

29. November 2023

androidx.work:work-*:2.9.0 wurde veröffentlicht. Version 2.9.0 enthält diese Commits.

Wichtige Änderungen seit Version 2.8.0

  • Beobachtbarkeit über Flow-s. Anstelle von LiveData kann der Fortschritt von Workern nun über Abläufe über WorkManager.getWorkInfosFlow und ähnliche Methoden beobachtet werden.
  • Jetzt gibt WorkManager einen Hinweis darauf, warum ein Worker zuvor beendet wurde. Sie kann von einem Worker selbst über die Methode getStopReason() oder von WorkInfo über getStopReason() abgefragt werden.
  • Genaue Planung der Mitarbeiter, die regelmäßig arbeiten, über setNextScheduleTimeOverride. Dies ermöglicht eine dynamische Berechnung des nächsten regelmäßigen Arbeitsplans, der verwendet werden kann, um erweiterte Funktionen wie adaptive Aktualisierungszeiten, benutzerdefinierte Wiederholungsverhalten zu implementieren oder einen Newsfeed-Worker auszuführen, bevor der Nutzer jeden Morgen ohne Drift aufwacht. ExistingPeriodicWorkPolicy.UPDATE sollte zusammen mit diesen Techniken verwendet werden, um zu verhindern, dass ein derzeit ausgeführter Worker bei der Planung des nächsten Workers abgebrochen wird.
  • Test durch WorkManager mit Threading, das auf die Produktion zutrifft. ExecutorsMode.PRESERVE_EXECUTORS kann in initializeTestWorkManager verwendet werden, um die in Configuration festgelegten Executors beizubehalten und den echten Hauptthread zu verwenden.
  • Koroutinen-APIs wie CoroutineWorker wurden vom zusätzlichen Artefakt „work-runtime-ktx“ in das Haupt-Artefakt „work-runtime“ verschoben. „work-runtime-ktx“ ist jetzt leer.

API-Änderungen

  • stopReason wurde WorkInfo hinzugefügt. Nachdem der Worker ausgeführt wurde, wird stopReason verfügbar gemacht. Das kann in der Meldung von stopReason hilfreich sein, denn sobald ein Worker beendet wurde, kann eine App selbst sehr schnell beendet werden. (I21386)
  • Zulassen, dass Clock über die Konfiguration festgelegt und verwendet wird, um die Ausführungsabfolge von Worker-Tests zu steuern. (IC586e)
  • Die Methode getStopReason() wurde zu ListenableWorker hinzugefügt, die einen Hinweis darauf gibt, warum der Worker beendet wurde. (I07060)
  • WorkManagerTestInitHelper#closeWorkDatabase() wurde hinzugefügt, um die Warnung von Closeguard zu gehackten Ressourcen zu vermeiden. (Ia8d49)
  • Der Konstruktor von WorkInfo ist jetzt öffentlich, was beim Testen nützlich sein kann. (Ia00b6, b/209145335)
  • work-runtime-ktx ist jetzt leer, CoroutineWorker und andere Kotlin-spezifische Dienstprogramme sind jetzt im Haupt-Work Runtime-Artefakt verfügbar. (I71a9a)
  • Die Methode setNextScheduleTimeOverride wurde hinzugefügt, die das genaue Festlegen regelmäßiger Arbeitspläne (I3b4da) ermöglicht.
  • getNextScheduleTimeMillis zum Abrufen geplanter Laufzeitinformationen wurde zu WorkInfo hinzugefügt. (I797e4)
  • Informationen zur anfänglichen Verzögerung und Periodizität werden WorkInfo hinzugefügt. (I52f2f)
  • Zusätzliche Methode, die Worker über Abläufe mit den Methoden getWorkInfosByTagFlow, getWorkInfoByIdFlow, getWorkInfosForUniqueWorkFlow, getWorkInfosFlow (If122a) beobachtet
  • Fehlende Anmerkungen @RequiresApi(...) zu Constraints hinzugefügt Konstruktoren und Eigenschaften. Sie sind jetzt an die entsprechenden Anmerkungen der Setter in Constraints.Builder ausgerichtet, die aus frühen Versionen von WorkManager stammen. (I6d7d2)
  • In WorkManager gibt es jetzt ein separates Limit für Inhalts-URI-Worker, um ihnen garantierte Slots in JobScheduler zu gewähren. So wird verhindert, dass unter der hohen Auslastung fehlende Inhaltsupdates fehlen. Das Limit kann über Configuration.Builder.setContentUriTriggerWorkersLimit konfiguriert werden. (IC128f)
  • Einschränkungen werden zu WorkInfo hinzugefügt. (I162c0)

Version 2.9.0-rc01

18. Oktober 2023

androidx.work:work-*:2.9.0-rc01 wurde veröffentlicht. Version 2.9.0-rc01 enthält diese Commits.

  • Keine Änderungen seit dem letzten Betarelease

Version 2.9.0-beta01

6. September 2023

androidx.work:work-*:2.9.0-beta01 wurde veröffentlicht. Version 2.9.0-beta01 enthält diese Commits.

API-Änderungen

Version 2.9.0-alpha02

26. Juli 2023

androidx.work:work-*:2.9.0-alpha02 wurde veröffentlicht. Version 2.9.0-alpha02 enthält diese Commits.

Neue Funktionen

  • Jetzt gibt WorkManager einen Hinweis darauf, warum ein Worker zuvor beendet wurde. Sie kann von einem Worker selbst über die Methode getStopReason() oder von WorkInfo über getStopReason() abgefragt werden.

API-Änderungen

  • stopReason wurde WorkInfo hinzugefügt. Nach der Ausführung des Workers werden stopReason verfügbar gemacht. Es könnte hilfreich sein, stopReason für die Berichterstellung zu verwenden, da eine Anwendung nach dem Beenden eines Workers schnell beendet werden kann. (I21386)
  • Zulassen, dass die Uhr über die Konfiguration eingestellt und zum Steuern der Ausführungsabfolge von Worker-Tests verwendet wird. (IC586e)
  • Die Methode getStopReason() wurde zu ListenableWorker hinzugefügt, die einen Hinweis darauf gibt, warum der Worker beendet wurde. (I07060)
  • WorkManagerTestInitHelper#closeWorkDatabase() wurde hinzugefügt, um die Warnung von Closeguard zu gehackten Ressourcen zu vermeiden. (Ia8d49)

Fehlerkorrekturen

  • Es besteht jetzt die Möglichkeit, overrideNextScheduleTime mithilfe von TestDriver zu umgehen und Probleme mit der Testbarkeit wurden behoben. (IC2905)

Version 2.9.0-alpha01

7. Juni 2023

androidx.work:work-*:2.9.0-alpha01 wurde veröffentlicht. Version 2.9.0-alpha01 enthält diese Commits.

Neue Funktionen

  • Beobachtbarkeit über Flow-s. Anstelle von LiveData kann der Fortschritt von Workern nun über Abläufe über WorkManager.getWorkInfosFlow und ähnliche Methoden beobachtet werden.
  • Genaue Planung der Mitarbeiter, die regelmäßig arbeiten, über setNextScheduleTimeOverride. Dies ermöglicht eine dynamische Berechnung des nächsten regelmäßigen Arbeitsplans, der verwendet werden kann, um erweiterte Funktionen wie adaptive Aktualisierungszeiten, benutzerdefinierte Wiederholungsverhalten zu implementieren oder einen Newsfeed-Worker auszuführen, bevor der Nutzer jeden Morgen ohne Drift aufwacht. ExistingPeriodicWorkPolicy.UPDATE sollte zusammen mit diesen Techniken verwendet werden, um zu verhindern, dass ein derzeit ausgeführter Worker bei der Planung des nächsten Workers abgebrochen wird.
  • Tests von WorkManager mit Threading-Abgleich im Produktionsbereich. Mit ExecutorsMode.PRESERVE_EXECUTORS können die in Configuration festgelegten Executors beibehalten und der echte Hauptthread verwendet werden.
  • Coroutines-APIs wie CoroutineWorker wurden vom zusätzlichen Artefakt work-runtime-ktx in das Hauptartefakt work-runtime verschoben. „work-runtime-ktx“ ist jetzt leer.

API-Änderungen

  • Der Konstruktor von WorkInfo ist jetzt öffentlich, das kann beim Testen nützlich sein. (Ia00b6, b/209145335)
  • work-runtime-ktx ist jetzt leer, CoroutineWorker und andere kotlin-spezifische Dienstprogramme sind jetzt im Hauptartefakt von work-runtime verfügbar. (I71a9a)
  • Die Methode setNextScheduleTimeOverride wurde hinzugefügt, die das genaue Festlegen regelmäßiger Arbeitspläne (I3b4da) ermöglicht.
  • getEarliestRunTimeMillis wurde in getNextScheduleTimeMillis umbenannt. (I2bd7a)
  • Informationen zur nächsten geplanten Laufzeit werden zu WorkInfo hinzugefügt. (I797e4)
  • Informationen zur anfänglichen Verzögerung und Periodizität werden zu WorkInfo hinzugefügt. (I52f2f)
  • Zusätzliche Methode, die Worker über Abläufe mit den Methoden getWorkInfosByTagFlow, getWorkInfoByIdFlow, getWorkInfosForUniqueWorkFlow, getWorkInfosFlow (If122a) beobachtet
  • Fehlende Anmerkungen @RequiresApi(...) zu Einschränkungen hinzugefügt Konstruktoren und Eigenschaften. Sie sind jetzt an die entsprechenden Anmerkungen der Setter in Constraints.Builder ausgerichtet, die aus frühen Versionen von WorkManager stammen. (I6d7d2)
  • In WorkManager gibt es jetzt ein separates Limit für Inhalts-URI-Worker, um ihnen garantierte Slots in JobScheduler zu gewähren. So wird verhindert, dass unter der hohen Auslastung fehlende Inhaltsupdates fehlen. Das Limit kann über Configuration.Builder.setContentUriTriggerWorkersLimit konfiguriert werden. (IC128f)
  • Einschränkungen werden zu WorkInfo hinzugefügt. (I162c0)

Version 2.8

Version 2.8.1

22. März 2023

androidx.work:work-*:2.8.1 wurde veröffentlicht. Version 2.8.1 enthält diese Commits.

Fehlerkorrekturen

  • Der ANR-Fehler in RescheduleReceiver wurde behoben, bei dem zwei simultane Übertragungen zuvor nicht korrekt verarbeitet wurden. (b/236906724)

Version 2.8.0

8. Februar 2023

androidx.work:work-*:2.8.0 wurde veröffentlicht. Version 2.8.0 enthält diese Commits.

Wichtige Änderungen seit Version 2.7.0

Neue Funktionen

API-Änderungen

  • WorkManager.updateWork wurde hinzugefügt, um Arbeit zu aktualisieren, wobei die ursprüngliche Zeit und Verkettung in der Warteschlange beibehalten wurden.(I9a248, b/219446409)
  • ExistingPeriodicWorkPolicy.UPDATE wurde hinzugefügt. Mit dieser Richtlinie lässt sich ein regelmäßig ausgeführtes Werk anhand des Namens aktualisieren. Sie ähnelt dem vorhandenen REPLACE, ist aber weniger aufdringlich: Ein Worker wird nicht abgebrochen, wenn er gerade ausgeführt wird, und die Warteschlangenzeit wird beibehalten. Die anfängliche Verzögerung und Periode werden anhand der ursprünglichen Zeit der Warteschlange und nicht der Aktualisierungszeit berechnet. REPLACE wurde eingestellt, um Verwechslungen zwischen REPLACE und UPDATE mit ähnlichen Namen zu verringern. Wenn Sie die vorherige Semantik von REPLACE beibehalten möchten, können Sie die neu hinzugefügte CANCEL_AND_REENQUEUE verwenden, die mit REPLACE identisch ist. (I985ed, b/219446409)
  • Möglichkeit hinzugefügt, Planungsausnahmen abzufangen, indem Consumer<Throwable> über setSchedulingExceptionHandler bereitgestellt wird
  • Es wurde die Möglichkeit hinzugefügt, Consumer<Throwable> über setInitializationExceptionHandler anzugeben, um festzustellen, ob beim Initialisieren von WorkManager Probleme aufgetreten sind.
  • Inline-Assistenten für OneTimeWorkRequest und PeriodicWorkRequest wurden von androidx.work:work-runtime-ktx nach androidx.work:work-runtime verschoben (I0010f, b/209145335).
  • Die Hilfsmethoden WorkQuery.fromIds, WorkQuery.fromStates, WorkQuery.fromUniqueWorkNames und WorkQuery.fromTags wurden hinzugefügt, um WorkQuery direkt zu erstellen. (b/199919736) (If48f2, b/199919736)
  • getForegroundInfo“ wurde zu „Worker“ hinzugefügt. (Ic1ead)
  • RxWorker für RxJava 2 und RxJava 3 hat jetzt setForeground, das Completable zurückgibt, der anstelle von setForegroundInfoAsync verwendet werden kann, das ListenableFuture zurückgibt
  • RxWorker für RxJava 2 und RxJava 3 hat getForegroundInfo, das Single zurückgibt. Dieses kann anstelle von getForegroundInfoAsync verwendet werden, das ListenableFuture zurückgibt. (b/203851459)
  • Einschränkungen können jetzt direkt erstellt werden, anstatt Constraints.Builder zu verwenden, was für Kotlin-Nutzer praktisch ist. (Idc390, b/137568653)
  • Neue Funktion, mit der geprüft werden kann, ob WorkManager initialisiert wurde. Außerdem wurde eine neue getConfiguration() API für Bibliotheksentwickler hinzugefügt, um die Konfiguration abzurufen, mit der WorkManager initialisiert wurde. (I6eff3, b/212300336)

Fehlerkorrekturen

  • Ein Problem mit dem gierig-Planer, der verhinderte, dass Worker unter Last sofort ausgeführt wurden, wurde behoben. (I9686b, b/248111307)
  • @RequiresPermission wurde APIs hinzugefügt, für die die Berechtigung POST_NOTIFICATIONS ab SDK 33 erforderlich ist. (Ie542e, b/238790278)
  • Bei Verwendung von suspendCancellableCoroutine Stornierungen in CoroutineScope an ListenableFuture weitergeben.

Version 2.8.0-rc01

7. Dezember 2022

androidx.work:work-*:2.8.0-rc01 wurde veröffentlicht. Version 2.8.0-rc01 enthält diese Commits.

Neue Funktionen

  • Keine neuen Funktionen in dieser Version. Es handelt sich in erster Linie um einen Versionssprung,

Version 2.8.0-beta02

9. November 2022

androidx.work:work-*:2.8.0-beta02 wurde veröffentlicht. Version 2.8.0-beta02 enthält diese Commits.

Fehlerkorrekturen

  • Die Methode equals in WorkInfo wurde korrigiert, bei der zuvor keine Informationen zur neuen Generation berücksichtigt wurden. (4977cc)

Version 2.8.0-beta01

5. Oktober 2022

androidx.work:work-*:2.8.0-beta01 wurde veröffentlicht. Version 2.8.0-beta01 enthält diese Commits.

Fehlerkorrekturen

  • Ein Problem mit dem gierig-Planer, der verhinderte, dass Worker unter Last sofort ausgeführt wurden, wurde behoben. (I9686b, b/248111307)

Version 2.8.0-alpha04

7. September 2022

androidx.work:work-*:2.8.0-alpha04 wurde veröffentlicht. Version 2.8.0-alpha04 enthält diese Commits.

API-Änderungen

  • WorkerInfo.getGeneration() und WorkerParameters.getGeneration() wurden hinzugefügt, die die Generierung eines Workers zurückgeben. Ein Worker hat mehrere Generationen, wenn er über WorkManager.updateWork oder WorkManager.enqueueUniquePeriodicWork mit ExistingPeriodicWorkPolicy.UPDATE aktualisiert wurde. Wenn der Worker derzeit ausgeführt wird, kann diese Methode eine neuere Generation von der des aktuell ausgeführten Workers zurückgeben, wenn während der Ausführung des Workers eine Aktualisierung stattgefunden hat. (I665c5, b/219446409) (I128a9, b/219446409)
  • InitializationExceptionHandler wurde hinzugefügt, ein Ausnahme-Handler, mit dem festgestellt werden kann, ob beim Initialisieren von WorkManager Probleme aufgetreten sind. (I061de)

Version 2.8.0-alpha03

10. August 2022

androidx.work:work-*:2.8.0-alpha03 wurde veröffentlicht. Version 2.8.0-alpha03 enthält diese Commits.

Neue Funktionen

  • Es wurde eine Möglichkeit hinzugefügt, WorkRequests unaufdringlich zu aktualisieren, wobei die ursprüngliche Warteschlangenzeit, Verkettung usw. beibehalten werden. Weitere Informationen finden Sie unter WorkManager.updateWork und ExistingPeriodicWorkPolicy.UPDATE.

API-Änderungen

  • WorkManager.updateWork wurde hinzugefügt, um Arbeit zu aktualisieren, wobei die ursprüngliche Zeit und Verkettung in der Warteschlange beibehalten wurden.(I9a248, b/219446409)
  • ExistingPeriodicWorkPolicy.UPDATE wurde hinzugefügt. Mit dieser Richtlinie kann ein regelmäßig ausgeführtes Werk anhand des Namens aktualisiert werden. Sie ähnelt dem vorhandenen REPLACE, ist aber weniger aufdringlich: Ein Worker wird nicht abgebrochen, wenn er gerade ausgeführt wird, und die Warteschlangenzeit wird beibehalten. Die anfängliche Verzögerung und Periode werden anhand der ursprünglichen Zeit der Warteschlange und nicht der Aktualisierungszeit berechnet. REPLACE wurde eingestellt, um Verwechslungen zwischen sehr ähnlich heißen REPLACE und UPDATE zu verringern. Wenn Sie die vorherige Semantik von REPLACE beibehalten möchten, können Sie die neu hinzugefügte CANCEL_AND_REENQUEUE verwenden, die mit REPLACE identisch ist. (I985ed, b/219446409)
  • Fügen Sie die Möglichkeit hinzu, Planungsausnahmen abzufangen, indem Sie eine SchedulingExceptionHandler definieren. (I033eb)
  • Inline-Assistenten für OneTimeWorkRequest und PeriodicWorkRequest wurden von androidx.work:work-runtime-ktx nach androidx.work:work-runtime verschoben (I0010f, b/209145335)

Fehlerkorrekturen

  • @RequiresPermission wurde APIs hinzugefügt, für die ab SDK 33 die Berechtigung POST_NOTIFICATIONS gewährt werden muss. (Ie542e, b/238790278)

Version 2.8.0-alpha02

6. April 2022

androidx.work:work-*:2.8.0-alpha02 wurde veröffentlicht. Version 2.8.0-alpha02 enthält diese Commits.

API-Änderungen

  • Einschränkungen können jetzt direkt erstellt werden, anstatt den Builder zu verwenden, was für Kotlin-Nutzer praktisch ist. (Idc390, b/137568653)
  • Neue Funktion, mit der geprüft werden kann, ob WorkManager initialisiert wurde. Außerdem wurde eine neue getConfiguration() API für Bibliotheksentwickler hinzugefügt, um die Konfiguration abzurufen, mit der WorkManager initialisiert wurde. (I6eff3, b/212300336)

Version 2.8.0-alpha01

12. Januar 2022

androidx.work:work-*:2.8.0-alpha01 wurde veröffentlicht. Version 2.8.0-alpha01 enthält diese Commits.

API-Änderungen

  • Hilfsmethoden WorkQuery.fromStates, WorkQuery.fromUniqueWorkNames, WorkQuery.fromTags wurden hinzugefügt, um WorkQuery direkt zu erstellen. (If48f2, b/199919736)
  • Zusätzliche experimentelle BuildCompat-Methoden für zukünftige SDKs (Iafd82, b/207528937)
  • getForegroundInfo zu Worker hinzufügen. (Ic1ead)
  • Hilfsmethoden WorkQuery.fromIds, um WorkQuery direkt aus IDs zu erstellen wurden hinzugefügt. (Ie5bdf, b/199919736)
  • RxWorker hat jetzt setForeground, der Completable zurückgibt, kann anstelle von setForegroundInfoAsync verwendet werden, das ListenableFuture. (I85156)
  • RxWorker für RxJava 2 hat jetzt getForegroundInfo, das Single zurückgibt. kann anstelle von getForegroundInfoAsync verwendet werden, das ListenableFuture. (I21c91, b/203851459)
  • RxWorker für RxJava 3 hat jetzt getForegroundInfo, das Single zurückgibt. kann anstelle von getForegroundInfoAsync verwendet werden, das ListenableFuture. (I1ca8a)
  • RxWorker hat jetzt setForeground, der Completable zurückgibt, kann anstelle von setForegroundInfoAsync verwendet werden, das ListenableFuture. (I992a3, b/203851459)

Fehlerkorrekturen

  • Bei Verwendung von suspendCancellableCoroutine Stornierungen in CoroutineScope an ListenableFuture weitergeben. (I77e63)

Version 2.7

Version 2.7.1

17. November 2021

androidx.work:work-*:2.7.1 wurde veröffentlicht. Version 2.7.1 enthält diese Commits.

Fehlerkorrekturen

  • Bei Verwendung von suspendCancellableCoroutine werden Stornierungen in der CoroutineScope an die ListenableFuture weitergegeben. (I77e63)
  • Eine Ausnahme wird sofort ausgelöst, wenn verzögerte Arbeitsanfragen als beschleunigt gekennzeichnet werden. bef1762

Version 2.7.0

13. Oktober 2021

androidx.work:work-*:2.7.0 wurde veröffentlicht. Version 2.7.0 enthält diese Commits.

Wichtige Änderungen seit Version 2.6.0

  • WorkManager führt eine neue WorkRequest.Builder.setExpedited(...) API ein, um die Einschränkungen von Diensten im Vordergrund in Android 12 zu vereinfachen.

  • Bei der Verwendung von setExpedited(...) delegiert WorkManager ab Android 12 an Express-Jobs in JobScheduler. Gleichzeitig wird Abwärtskompatibilität zu früheren Versionen von Android durch Delegieren an einen Dienst im Vordergrund ermöglicht.

Version 2.7.0-rc01

29. September 2021

androidx.work:work-*:2.7.0-rc01 wurde veröffentlicht. Version 2.7.0-rc01 enthält diese Commits.

Diese Version ist mit androidx.work:work-*:2.7.0-beta01 identisch.

Version 2.7.0-beta01

1. September 2021

androidx.work:work-*:2.7.0-beta01 wurde veröffentlicht. Version 2.7.0-beta01 enthält diese Commits.

Neue Funktionen

  • Reduzieren Sie Multi-Prozess-SQLite-Konflikte bei der Initialisierung von WorkManager.

API-Änderungen

  • @ExperimentalExpeditedWork APIs entfernen, da die zugrunde liegenden Plattform-APIs für Android 12 (S) stabil sind. (aosp/1792806)

Fehlerkorrekturen

  • Geben Sie eine bessere Fehlermeldung für Express-Worker an, die getForegroundInfoAsync() nicht implementieren. (aosp/1809376)

Version 2.7.0-alpha05

21. Juli 2021

androidx.work:work-*:2.7.0-alpha05 wurde veröffentlicht. Version 2.7.0-alpha05 enthält diese Commits.

Diese Version enthält außerdem Fehlerkorrekturen der WorkManager-Version 2.6.0-beta02.

Version 2.7.0-alpha04

2. Juni 2021

androidx.work:work-*:2.7.0-alpha04 wurde veröffentlicht.

Diese Version enthält auch die Änderungen gegenüber dem Release 2.6.0-beta01.

API-Änderungen

Fehlerkorrekturen

  • Wenn Express-Aufträge verschoben werden, werden sie nicht mehr beschleunigt. Sie werden zu normalen Jobs.

Version 2.7.0-alpha03

21. April 2021

androidx.work:work-*:2.7.0-alpha03 wurde veröffentlicht. Version 2.7.0-alpha03 enthält diese Commits.

Neue Funktionen

  • Von WorkManager 2.6.0-alpha02: Fügt Unterstützung für Worker hinzu, die in jedem Prozess ausgeführt werden können. (Iaf200)

  • Von WorkManager 2.6.0-alpha02: Ein RemoteCoroutineWorker wurde hinzugefügt. Dies ist eine Implementierung von RemoteListenableWorker, die an einen Remote-Prozess gebunden werden kann. (I30578)

API-Änderungen

Version 2.7.0-alpha02

10. März 2021

androidx.work:work-*:2.7.0-alpha02 wurde veröffentlicht. Version 2.7.0-alpha02 enthält diese Commits.

Fehlerkorrekturen

  • Machen Sie die Veränderlichkeit von PendingIntent explizit, um einen Absturz bei der Ausrichtung auf Android 12 zu beheben. (b/180884673)

Version 2.7.0-alpha01

18. Februar 2021

androidx.work:work-*:2.7.0-alpha01 wurde veröffentlicht. Version 2.7.0-alpha01 enthält diese Commits.

Neue Funktionen

  • WorkManager führt eine neueWorkRequest.Builder.setExpedited(...) API ein, um die Einschränkungen von Diensten im Vordergrund in Android 12 zu berücksichtigen.

    Apps können keine Dienste im Vordergrund mehr starten, wenn sie im Hintergrund ausgeführt werden. Daher können Anwendungen WorkRequests als expedited kennzeichnen, um länger andauernde Vorgänge, die zuvor an den Lebenszyklus eines Diensts im Vordergrund gebunden waren, besser zu unterstützen.

    Diese API ist ein Ersatz für die APIs setForegroundAsync(...) und setForeground(...), die inzwischen verworfen wurden.

    Bei der Verwendung von setExpedited(...) delegiert WorkManager ab Android 12 an beschleunigte Jobs in JobScheduler und bietet Abwärtskompatibilität zu früheren Versionen von Android, indem er an Dienste im Vordergrund delegiert wird.

API-Änderungen

  • Unterstützung für Express-WorkRequests hinzufügen.

Version 2.6.0

Version 2.6.0

1. September 2021

androidx.work:work-*:2.6.0 wurde veröffentlicht. Version 2.6.0 enthält diese Commits.

Wichtige Änderungen seit Version 2.5.0

  • WorkManager verwendet jetzt androidx.startup, um WorkManager zu initialisieren. Wenn Sie in der Vergangenheit tools:node="remove" das ContentProvider verwendet haben, das zum Initialisieren von WorkManager verwendet wurde, gehen Sie stattdessen so vor:

    <provider
        android:name="androidx.startup.InitializationProvider"
        android:authorities=\"${applicationId}.androidx-startup"
        android:exported="false"
        tools:node=\"merge">
        <!-- If you are using androidx.startup to initialize other components -->
        <meta-data
            android:name="androidx.work.WorkManagerInitializer"
            android:value="androidx.startup"
            tools:node="remove" />
     </provider>
    
    <!-- If you want to disable android.startup completely. -->
     <provider
                android:name="androidx.startup.InitializationProvider"
                android:authorities="${applicationId}.androidx-startup"
                tools:node="remove" />
    
  • Zusätzliche Unterstützung für Worker, die in jedem Prozess ausgeführt werden können. (Iaf200)

  • Ein RemoteCoroutineWorker wurde hinzugefügt. Dies ist eine Implementierung von RemoteListenableWorker, die an einen Remoteprozess gebunden werden kann. (I30578)

Version 2.6.0-rc01

4. August 2021

androidx.work:work-*:2.6.0-rc01 wurde veröffentlicht. Version 2.6.0-rc01 enthält diese Commits.

Diese Version ist mit androidx.work:work-*:2.6.0-beta02 identisch.

Version 2.6.0-beta02

21. Juli 2021

androidx.work:work-*:2.6.0-beta02 wurde veröffentlicht. Version 2.6.0-beta02 enthält diese Commits.

Fehlerkorrekturen

  • RemoteWorkManager hebt die Bindung an RemoteWorkManagerService jetzt korrekt auf, wodurch RemoteWorkManagerService korrekt bereinigt werden kann. aosp/1730694
  • RemoteListenableWorker hebt die Bindung an RemoteWorkerService jetzt korrekt auf, wodurch RemoteWorkerService korrekt bereinigt werden kann. aosp/1743817
  • ForceStopRunnable wird jetzt nur im primären Anwendungsprozess ausgeführt. Dies ist eine Optimierung und vermeidet Ressourcenkonflikte bei Apps, die mehrere Prozesse verwenden. aosp/1749180, aosp/1761729

Version 2.6.0-beta01

2. Juni 2021

androidx.work:work-*:2.6.0-beta01 wurde veröffentlicht. Version 2.6.0-beta01 enthält diese Commits.

Diese Version enthält einige kleinere Dokumentationsverbesserungen. Der Release ist weitgehend identisch mit 2.6.0-alpha02.

Version 2.6.0-alpha02

21. April 2021

androidx.work:work-*:2.6.0-alpha02 wurde veröffentlicht. Version 2.6.0-alpha02 enthält diese Commits.

Neue Funktionen

  • Zusätzliche Unterstützung für Worker, die in jedem Prozess ausgeführt werden können. (Iaf200)

  • Ein RemoteCoroutineWorker wurde hinzugefügt. Dies ist eine Implementierung von RemoteListenableWorker, die an einen Remote-Prozess gebunden werden kann. (I30578)

API-Änderungen

  • Unterstützung für die Netzwerkeinschränkung TEMPORARILY_UNMETERED wurde hinzugefügt. (I08d5e)
  • Multi-Prozess-Worker-Unterstützung für setProgressAsync(). (Ib6d08)
  • Machen Sie WorkManagerInitializer öffentlich, damit andere androidx.startup.Initializers sie als Abhängigkeiten verwenden können. (I5ab11)

Version 2.6.0-alpha01

24. März 2021

androidx.work:work-*:2.6.0-alpha01 wurde veröffentlicht. Version 2.6.0-alpha01 enthält diese Commits.

Neue Funktionen

  • WorkManager verwendet jetzt androidx.startup, um WorkManager zu initialisieren. Zuvor wurde dies von androidx.work.impl.WorkManagerInitializer durchgeführt. (aosp/1608813)

    Wenn Sie tools:node="remove" verwendet haben, wird die ContentProvider zum Initialisieren verwendet in der Vergangenheit durchgeführt haben, dann müssen Sie stattdessen Folgendes tun.

     <provider
        android:name="androidx.startup.InitializationProvider"
        android:authorities=\"${applicationId}.androidx-startup"
        android:exported="false"
        tools:node=\"merge">
        <!-- If you are using androidx.startup to initialize other components -->
        <meta-data
            android:name="androidx.work.impl.WorkManagerInitializer"
            android:value="androidx.startup"
            tools:node="remove" />
     </provider>
    

    (oder)

     <!-- If you want to disable android.startup completely. -->
     <provider
        android:name="androidx.startup.InitializationProvider"
        android:authorities="${applicationId}.androidx-startup"
        tools:node="remove">
     </provider>
    

API-Änderungen

  • Fügen Sie eine Result.getOutputData() API hinzu, die den outputData des ListenableWorkers zurückgibt. (Ie51e3)

Fehlerkorrekturen

  • Fügen Sie eine Behelfslösung für einen OEM-Fehler hinzu, der dazu führt, dass bei der Verwendung von AlarmManager APIs ein SecurityException ausgegeben wird. (aosp/1587518)

Version 2.5.0

Version 2.5.0

27. Januar 2021

androidx.work:work-*:2.5.0 wurde veröffentlicht. Version 2.5.0 enthält diese Commits.

Große Änderungen seit Version 2.4.0

  • Ein neues :work:work-multiprocess-Artefakt für Anwendungen, die mehrere Prozesse verwenden. Dies führt zu einer Leistungssteigerung, da die Planung von Arbeitsanfragen mit einem einzigen Prozess vereinheitlicht wird.
    • Definieren Sie zur Verwendung von work-multiprocess eine Abhängigkeit von: implementation "androidx.work:work-multiprocess:2.5.0"
    • Legen Sie mithilfe von Configuration.Builder.setDefaultProcessName(String) einen primären Prozess fest.
    • Wenn du work-multiprocess verwendest, solltest du auch RemoteWorkManager zur Verwaltung deiner WorkRequest nutzen. RemoteWorkManager wendet sich immer an den vorgesehenen Prozess. Der in Bearbeitung befindliche Planer wird ebenfalls im vorgesehenen Prozess ausgeführt.
  • Manchmal kann ActivityManager die Instanz JobService nicht instanziieren, um einen Job zu starten. Dies führt dazu, dass der zugrunde liegende Job aufgrund eines Plattformfehlers automatisch verworfen wird. WorkManager stellt jetzt sicher, dass für jede einzelne WorkRequest Sicherungsjobs vorhanden sind, wenn eine Application durch den Abgleich von Jobs initialisiert wird. Dies verbessert die Zuverlässigkeit der Jobausführung erheblich. (b/172475041, aosp/1489577)
  • WorkManager begrenzt das Wachstum der Datenbank, indem die Pufferdauer reduziert wird, die WorkRequests nach Abschluss einer WorkRequest verfolgt werden. Die Dauer betrug zuvor 7 Tage. Er wurde auf 1 Tag + die keepResultsForAtLeast-Dauer reduziert. (aosp/1419708)
  • Die TestListenableWorkerBuilder unterstützt jetzt die reifizierte Klasse, die ListenableWorker erweitert, um das Testen zu vereinfachen. (aosp/1443299, b/169787349)
  • Der WorkManager Inspector ist jetzt in Android Studio Arctic Fox verfügbar.

Version 2.5.0-rc01

13. Januar 2021

androidx.work:work-*:2.5.0-rc01 wurde veröffentlicht. Version 2.5.0-rc01 enthält diese Commits.

Fehlerkorrekturen

  • Es wurde ein Fehler behoben, bei dem getWorkInfosLiveData nicht korrekt ungültig gemacht wurde, nachdem Entitäten bei Verwendung der WorkQuery-basierten API aktualisiert wurden. (aosp/1540566, b/173769028)
  • Es wurde ein Fehler behoben, bei dem Datenbanktransaktionen in einigen seltenen Fällen nicht als erfolgreich markiert wurden. Dies verursacht bei einigen Motorola-Geräten Probleme. (aosp/1535368, b/175944460)
  • Es wurde ein Fehler behoben, durch den NoSuchElementExceptions beim Aufheben der Bindung von einem inaktiven Prozess ignoriert werden. (aosp/1530589)
  • Verbessern Sie ConstraintTrackingWorker, damit eine ListenableWorker nur beendet wird, wenn sie nicht bereits angehalten wurde. (aosp/1496844, b/172946965)
  • androidx.work-Bibliotheken auf Java 8 (Ibd2f2) aktualisieren

Version 2.5.0-beta02

2. Dezember 2020

androidx.work:work-*:2.5.0-beta02 wurde veröffentlicht. Version 2.5.0-beta02 enthält diese Commits.

Fehlerkorrekturen

  • Es wurde ein Fehler in androidx.work:work-multiprocess behoben, bei dem WorkManager beim Versuch, eine Bindung an den vorgesehenen Prozess herzustellen, versehentlich den aufrufenden Thread blockierte. (aosp/1475538)
  • Ein Fehler wurde behoben, bei dem PeriodicWorkRequests nicht richtig abgeglichen wurden. (b/172475041, aosp/1489577)
  • Es wurde eine Problemumgehung für einen Plattformfehler hinzugefügt, wenn der Dienst im Vordergrund bei Verwendung der setForeground* APIs beendet wird. (b/170924044, aosp/1489901)

Version 2.5.0-beta01

28. Oktober 2020

androidx.work:work-*:2.5.0-beta01 wurde veröffentlicht. Version 2.5.0-beta01 enthält diese Commits.

Neue Funktionen

  • WorkManager drosselt automatisch die Anzahl der WorkRequests, die vom Planer während der Verarbeitung erfasst werden können. Die Anforderungen werden weiterhin in FIFO-Reihenfolge ausgeführt. (aosp/1455228)
  • WorkManager versucht eine Wiederherstellung, wenn sich der Datenspeicher der Anwendung in einem fehlerhaften Zustand befindet. (aosp/1463103)

Fehlerkorrekturen

  • Wenn ListenableWorkers unterbrochen werden, markieren Sie sie sofort als ENQUEUED, damit sie später neu geplant werden können. (aosp/1455618, b/170273988)

Version 2.5.0-alpha03

14. Oktober 2020

androidx.work:work-*:2.5.0-alpha03 wurde veröffentlicht. Version 2.5.0-alpha03 enthält diese Commits.

API-Änderungen

  • TestListenableWorkerBuilder und TestWorkerBuilder verwenden keine Rohtypen. (I883ad, b/169787349)

Fehlerkorrekturen

  • Verwenden Sie ApplicationInfo, um den Namen des Standardanwendungsprozesses zu bestimmen. (b/168716641, aosp/1429950)
  • Korrigieren Sie die Sichtbarkeitsregeln für RemoteWorkManager und RemoteWorkContinuation. Diese APIs sind nicht mehr als @Restricted gekennzeichnet. (aosp/1432091)
  • ProGuard-Regeln für :work:work-multiprocess wurden korrigiert. (aosp/1432091)
  • Verbessern Sie den Benachrichtigungslebenszyklus für lang andauernde Aufgaben, die an einen Dienst im Vordergrund gebunden sind. (b/168502234, aosp/1431331)

Version 2.5.0-alpha02

16. September 2020

androidx.work:work-*:2.5.0-alpha02 wurde veröffentlicht. Version 2.5.0-alpha02 enthält diese Commits.

Neue Funktionen

  • Fügen Sie eine API zu WorkQuery hinzu, damit Sie ids zum Abfragen von WorkInfos verwenden können. (aosp/1412372, b/157335295)
  • WorkManager unterstützt Apps, die mehrere Prozesse verwenden, besser mit einem neuen Artefakt (androidx.work:work-multiprocess:*). Dieses neue Artefakt hilft bei der Lösung einiger Probleme, die bei großen Anwendungen auftreten können, darunter:
    • WorkManager muss in der Regel bei jedem App-Prozess initialisiert werden. Dies ist nicht großartig, da es zu vermehrten SQLite-Konflikten gibt, die wiederum andere Probleme verursachen. WorkManager hat jetzt neue APIs, mit denen mithilfe von Configuration#setDefaultProcessName(processName) ein primärer App-Prozess festgelegt werden kann. processName ist ein voll qualifizierter Prozessname im Format packageName:processName (z.B. com.example:remote).
    • Eine Reihe neuer APIs: RemoteWorkManager und RemoteWorkContinuation zu enqueue-, cancel- und query-Arbeitsanfragen. Diese APIs enthalten keine LiveData-Varianten, um SQLite-Konflikte über mehrere Prozesse hinweg zu vermeiden. Alle Aufrufe an enqueue, cancel und query werden mithilfe von AIDL an einen primary-Anwendungsprozess weitergeleitet und geben ListenableFuture fließend zurück. (aosp/1392657, aosp/1411210 aosp/1412215, aosp/1417713)

API-Änderungen

  • In WorkManager werden abgeschlossene WorkRequests, die keine unvollständigen Abhängigkeiten haben, jetzt aggressiver bereinigt. Die Pufferdauer wurde von 7 Tagen in 1 Tag geändert. (aosp/1419708)

Fehlerkorrekturen

  • WorkManager gleicht Jobs proaktiv ab, sodass WorkRequests und JobScheduler-Jobs synchronisiert werden, wenn WorkManager initialisiert wird. (aosp/1412794, b/166292069)

Version 2.5.0-alpha01

19. August 2020

androidx.work:work-*:2.5.0-alpha01 wurde veröffentlicht. Version 2.5.0-alpha01 enthält diese Commits.

Neue Funktionen

  • Änderungen an internen APIs, durch die wir künftig bessere Tools für WorkManager bereitstellen können. Wir halten dich auf dem Laufenden.

Fehlerkorrekturen

  • SecurityExceptions beim Erfassen des Netzwerkstatus auf einigen Geräten verarbeiten. (aosp/1396969)

Externer Beitrag

Version 2.4.0

Version 2.4.0

22. Juli 2020

androidx.work:work-*:2.4.0 wurde veröffentlicht. Version 2.4.0 enthält diese Commits.

Große Änderungen seit Version 2.3.0

  • Der Prozess des Planers von WorkManager ist jetzt leistungsfähiger. Zuvor hat der in Bearbeitung befindliche Scheduler nur die Ausführung von Arbeiten berücksichtigt, die nicht verzögert waren und deren Einschränkungen erfüllt wurden. Jetzt verfolgt der Planer in Bearbeitung WorkRequests, die möglicherweise in Zukunft ausgeführt werden, einschließlich PeriodicWorkRequests. Das in Bearbeitung befindliche Scheduler unterliegt ebenfalls keinen Zeitplanbeschränkungen, ist jedoch auf die Größe des vom WorkManager verwendeten Executor beschränkt. Das bedeutet, dass die Anwendung jetzt viel mehr WorkRequests ausführen kann, wenn sie im Vordergrund ausgeführt wird. Zur Verwaltung der Ausführung verzögerter Arbeiten im Vordergrund hat WorkManager außerdem eine neue konfigurierbare RunnableScheduler eingeführt. (aosp/1185778)
  • WorkManager unterstützt jetzt RxJava 3. Um RxJava 3 zu verwenden, müssen Sie die folgende Abhängigkeit einschließen: implementation "androidx.work:work-rxjava3:2.4.0". (aosp/1277904)
  • Neue Funktion zur Abfrage von WorkInfos mithilfe von WorkQuery. Dies ist nützlich, wenn Entwickler WorkInfos mit einer Kombination aus mehreren Attributen abfragen möchten. Weitere Informationen findest du unter WorkQuery.Builder.fromStates(...), WorkQuery.Builder. fromTags(...) oder WorkQuery.Builder.fromUniqueWorkNames(...). (aosp/1253230, b/143847546)
  • Fügen Sie die Funktion hinzu, mit der Diagnoseinformationen von WorkManager angefordert werden können:

    adb shell am broadcast -a "androidx.work.diagnostics.REQUEST_DIAGNOSTICS" -p "<your_app_package_name>"
    

    So erhalten Sie viele nützliche Informationen, z. B.:

    • WorkRequests, die in den letzten 24 Stunden abgeschlossen wurden.
    • WorkRequests, die gerade AUSGEFÜHRT werden.
    • Geplante WorkRequests. (aosp/1235501)
  • Fügen Sie ExistingWorkPolicy.APPEND_OR_REPLACE hinzu. Dies ähnelt APPEND, ersetzt aber eine Kette, die die Voraussetzungen nicht erfüllt oder nicht erfüllt hat. (b/134613984, aosp/1199640)

  • Sie bieten die Möglichkeit, eine benutzerdefinierte RunnableScheduler hinzuzufügen, um WorkRequests zu verfolgen, die in Zukunft ausgeführt werden müssen. Diese wird vom In-Process-Planer verwendet. (aosp/1203944)

  • Unterstützung für das dynamische Hinzufügen von Factorys, an die delegiert werden soll, bei Verwendung eines DelegatingWorkerFactory. (b/156289105, aosp/1309745)

  • Richten Sie das Tracking für BATTERY_NOT_LOW-Einschränkungen enger an der Plattform aus. (aosp/1312583)

  • Der In-Process-Planer verwendet jetzt bessere APIs, um den Namen des Prozesses zu bestimmen. Dies ist nützlich, um Apps mit mehreren Prozessen besser zu unterstützen. (aosp/1324732)

  • Neue Lint-Regeln, die Folgendes erzwingen:

    • Verwendung des richtigen foregroundServiceType bei Verwendung von setForegroundAsync() APIs (b/147873061, aosp/1215915)
    • Angabe von JobScheduler-IDs, die WorkManager bei der direkten Verwendung von JobService APIs verwenden soll. aosp/1223567
    • Es wurde eine neue Lint-Regel hinzugefügt, die dafür sorgt, dass ListenableWorkerImplementierungen jetzt public sind, wenn die Standardeinstellung WorkerFactory verwendet wird. (aosp/1291262)
  • setForegroundAsync()-Aufrufe, die nicht vor Abschluss von ListenableWorker abgeschlossen werden, werden jetzt über ein IllegalStateException auf der zurückgegebenen ListenableFuture signalisiert. (aosp/1262743)

  • Es wurde ein Fehler behoben, bei dem die ForegroundService nicht angehalten wurde, nachdem ein Worker im Vordergrund unterbrochen wurde. (b/155579898, aosp/1302153)

  • Es wurde ein Fehler behoben, bei dem WorkManager versucht, mehrere Instanzen einer Worker auszuführen, die an einen Dienst im Vordergrund gebunden ist (b/156310133, aosp/1309853)

Version 2.4.0-rc01

24. Juni 2020

androidx.work:work-*:2.4.0-rc01 wurde veröffentlicht. Version 2.4.0-rc01 enthält diese Commits.

Fehlerkorrekturen

  • Der In-Process-Planer verwendet jetzt bessere APIs, um den Namen des Prozesses zu bestimmen. Dies ist nützlich, um Apps mit mehreren Prozessen besser zu unterstützen. (aosp/1324732)

Version 2.4.0-beta01

20. Mai 2020

androidx.work:work-gcm:2.4.0-beta01, androidx.work:work-runtime:2.4.0-beta01, androidx.work:work-runtime-ktx:2.4.0-beta01, androidx.work:work-rxjava2:2.4.0-beta01 und androidx.work:work-testing:2.4.0-beta01 wurden veröffentlicht. Version 2.4.0-beta01 enthält diese Commits.

Fehlerkorrekturen

  • Es wurde ein Fehler behoben, bei dem die ForegroundService nicht angehalten wurde, nachdem ein Worker im Vordergrund unterbrochen wurde. (b/155579898, aosp/1302153)
  • Es wurde ein Fehler behoben, bei dem WorkManager versucht, mehrere Instanzen einer Worker auszuführen, die an einen Dienst im Vordergrund gebunden ist (b/156310133, aosp/1309853).
  • Unterstützung für das dynamische Hinzufügen von Factorys, an die delegiert werden soll, bei Verwendung eines DelegatingWorkerFactory. (b/156289105, aosp/1309745)
  • Richten Sie das Tracking für BATTERY_NOT_LOW-Einschränkungen enger an der Plattform aus. (aosp/1312583)

Version 2.4.0-alpha03

29. April 2020

androidx.work:work-*:2.4.0-alpha03 wurde veröffentlicht. Version 2.4.0-alpha03 enthält diese Commits.

Neue Funktionen

  • WorkManager unterstützt jetzt RxJava 3. Um RxJava 3 zu verwenden, müssen Sie die folgende Abhängigkeit einschließen: implementation "androidx.work:work-rxjava3:2.4.0-alpha03". (aosp/1277904)
  • Es wurde eine neue Lint-Regel hinzugefügt, die dafür sorgt, dass ListenableWorkerImplementierungen jetzt public sind, wenn die Standardeinstellung WorkerFactory verwendet wird. (aosp/1291262)

API-Änderungen

  • Der Aufruf von setProgressAsync() nach Abschluss einer ListenableWorker-Ausführung signalisiert jetzt ein Exception über ListenableFuture. (aosp/1285494)
  • WorkQuery.Builder ist jetzt als final gekennzeichnet. (aosp/1275037)
  • Die WorkQuery.Builder-Factory-Methoden withStates, withTags und withUniqueWorkNames wurden in fromStates, fromTags und fromUniqueWorkNames umbenannt. (aosp/1280287)

Fehlerkorrekturen

Version 2.4.0-alpha02

1. April 2020

androidx.work:work-*:2.4.0-alpha02 wurde veröffentlicht. Version 2.4.0-alpha02 enthält diese Commits.

Neue Funktionen

  • Es wurde eine neue Lint-Regel hinzugefügt, die warnt, wenn für WorkRequest sowohl Constraints.setRequiresCharging(...) als auch Constraints.setRequiresDeviceIdle(...) erforderlich sind. Einige Geräte werden nie geladen und inaktiv. Solche Anfragen würden daher seltener als erwartet ausgeführt. (aosp/1253840)

API-Änderungen

  • Neue Funktion zur Abfrage von WorkInfos mithilfe von WorkQuery. Dies ist nützlich, wenn Entwickler WorkInfos mit einer Kombination aus mehreren Attributen abfragen möchten. Weitere Informationen findest du unter WorkQuery.Builder withStates(...), WorkQuery.Builder withTags(...) oder WorkQuery.Builder withUniqueWorkNames(...). (aosp/1253230, b/143847546)

  • setForegroundAsync()-Aufrufe, die nicht vor Abschluss von ListenableWorker abgeschlossen werden, werden jetzt über ein IllegalStateException auf der zurückgegebenen ListenableFuture signalisiert. (aosp/1262743)

Fehlerkorrekturen

  • Die Lint-Regel, die PeriodicWorkRequest s auf ungültige Intervalldauer prüft, wurde korrigiert. (aosp/1254846, b/152606442)

Version 2.4.0-alpha01

4. März 2020

androidx.work:work-*:2.4.0-alpha01 wurde veröffentlicht. Version 2.4.0-alpha01 enthält diese Commits.

Neue Funktionen

  • Der Prozess des Planers von WorkManager ist jetzt leistungsfähiger. Zuvor hat der Prozessplaner nur die Ausführung von Arbeiten berücksichtigt, die nicht verzögert wurden und deren Einschränkungen erfüllt wurden. Jetzt verfolgt der Planer in Bearbeitung WorkRequests, die möglicherweise in Zukunft ausgeführt werden, einschließlich PeriodicWorkRequests. Der in Bearbeitung befindliche Planer hält außerdem keine Planungslimits ein, ist aber auf die Größe des vom WorkManager verwendeten Executor beschränkt. Das bedeutet, dass die Anwendung jetzt viel mehr WorkRequests ausführen kann, wenn sie im Vordergrund ausgeführt wird. (aosp/1185778)

  • Es besteht jetzt die Möglichkeit, mit adb shell am broadcast -a "androidx.work.diagnostics.REQUEST_DIAGNOSTICS" -p "<your_app_package_name>" Diagnoseinformationen vom WorkManager anzufordern. So erhalten Sie viele nützliche Informationen, z. B.:

    • WorkRequests, die in den letzten 24 Stunden abgeschlossen wurden.
    • WorkRequests, die gerade AUSGEFÜHRT werden.
    • Geplante WorkRequests. (aosp/1235501)
  • Neue Lint-Regeln, die Folgendes erzwingen:

    • Verwendung des richtigen foregroundServiceType bei Verwendung von setForegroundAsync() APIs (b/147873061, aosp/1215915)
    • Angabe von JobScheduler-IDs, die WorkManager verwenden soll, wenn JobService APIs direkt verwendet werden. (aosp/1223567)

API-Änderungen

  • Fügen Sie ExistingWorkPolicy.APPEND_OR_REPLACE hinzu. Dies ähnelt APPEND, ersetzt aber eine Kette, die die Voraussetzungen nicht erfüllt oder nicht erfüllt ist. (b/134613984, aosp/1199640)

  • Sie können eine benutzerdefinierte RunnableScheduler zum Verfolgen von WorkRequests hinzufügen, die in Zukunft ausgeführt werden müssen. Diese wird vom In-Process-Planer verwendet. (aosp/1203944)

Fehlerkorrekturen

  • setProgress() wurde in RxWorker eingestellt, da zuvor ein Single<Void>-Wert zurückgegeben wurde, der nicht möglich war. Eine neue API-setCompletableProgress() wurde hinzugefügt, die stattdessen eine Completable zurückgibt. und neue Lint-Regeln hinzugefügt, die die Migration zu den neuen APIs erleichtern. (b/150080946, aosp/1242665)

Version 2.3.4

Version 2.3.4

18. März 2020

androidx.work:work-*:2.3.4 wurde veröffentlicht. Version 2.3.4 enthält diese Commits.

Fehlerkorrekturen

  • Es wurde ein Fehler behoben, bei dem nach Überschreiten des Ausführungsfensters von 10 Minuten mehrere Instanzen von Workers mit langer Ausführungszeit ausgeführt wurden. (aosp/1247484, b/150553353)
  • Korrektur des Lint-IssueRegistry von WorkManager. Vielen Dank für den Beitrag, @ZacSweers von Slack. (aosp/1217923)

Version 2.3.3

Version 2.3.3

4. März 2020

androidx.work:work-*:2.3.3 wurde veröffentlicht. Version 2.3.3 enthält diese Commits.

Fehlerkorrekturen

  • Es wurde ein Fehler behoben, bei dem eine Worker nicht korrekt neu geplant wurde, wenn sie unterbrochen wurde. (b/150325687, aosp/1246571)

Version 2.3.2

Version 2.3.2

19. Februar 2020

androidx.work:work-*:2.3.2 wurden freigegeben. Version 2.3.2 enthält diese Commits.

Fehlerkorrekturen

  • Behebt ein Problem, bei dem WorkManager in seltenen Fällen das Limit von 100 Jobs in JobScheduler überschreitet. (aosp/1226859, b/149092520)
  • Fehlerkorrektur für eine Race-Bedingung in ConstraintControllers. (aosp/1220100)
  • Der Lebenszyklus von Diensten im Vordergrund für die Verwaltung von Workern mit langer Ausführungszeit wurde verbessert. (aosp/1226295)
  • Verbesserte Verwaltung der Kündigung von Benachrichtigungen für lange laufende Worker bei Löschung von Workern. (aosp/1228346)

Version 2.3.1

Version 2.3.1

5. Februar 2020

androidx.work:work-*:2.3.1 wurde veröffentlicht. Version 2.3.1 enthält diese Commits.

Fehlerkorrekturen

  • Bessere Verwaltung des Lebenszyklus von Notifications für lang andauernde Workers, die ausgeführt werden, wenn ein Service im Vordergrund aktiv ist. (aosp/1218539, b/147249312)
  • WorkManager ist jetzt von der stabilen androidx.sqlite:sqlite-framework:2.1.0 abhängig. (aosp/1217729)
  • Lint-Regeln wurden hinzugefügt, um sicherzustellen, dass eine foregroundServiceType in der AndroidManifest.xml angegeben wird, wenn foregroundServiceTypes in ForegroundInfo verwendet werden. (aosp/1214207, b/147873061)

Version 2.3.0

Version 2.3.0

22. Januar 2020

androidx.work:work-*:2.3.0 wurde ohne Änderungen seit dem 2.3.0-rc01 freigegeben. Version 2.3.0 enthält diese Commits.

Wichtige Änderungen seit Version 2.2.0

  • Unterstützung für lange andauernde oder wichtige Aufgaben über ListenableWorker#setForegroundAsync().
  • Unterstützung für Worker Progress über ListenableWorker#setProgressAsync().
  • WorkManager bündelt jetzt zusätzliche Lint-Regeln als Teil der Bibliothek, wodurch Programmfehler frühzeitig erkannt werden.

Version 2.3.0-rc01

8. Januar 2020

androidx.work:work-*:2.3.0-rc01 wurde veröffentlicht. Version 2.3.0-rc01 enthält diese Commits.

Dieser Release ist mit 2.3.0-beta02 identisch.

Fehlerkorrekturen

  • Das Artefakt work-testing definiert jetzt eine api-Abhängigkeit von work-runtime-ktx. (aosp/1194410)

Version 2.3.0-beta02

18. Dezember 2019

androidx.work:work-*:2.3.0-beta02 wurde veröffentlicht. Version 2.3.0-beta02 enthält diese Commits.

Neue Funktionen

  • Es wurde eine bessere Fehlermeldung für nicht wiederherstellbare SQLite-Ausnahmen hinzugefügt. (aosp/1185777)
  • Es wurde eine Lint-Regel hinzugefügt, die sicherstellt, dass der Contentanbieter androidx.work.impl.WorkManagerInitializer bei Verwendung der On-Demand-Initialisierung aus AndroidManifest.xml entfernt wird. (aosp/1167007)
  • Es wurde eine Lint-Warnung hinzugefügt, wenn enqueue() statt enqueueUniquePeriodicWork() für PeriodicWorkRequest verwendet wird. (aosp/1166032)

API-Änderungen

  • ForegroundInfo erfordert jetzt die Angabe der notificationId, die bei Verwendung von ListenableWorker.setForegroundAsync() verwendet werden soll. Das ist eine funktionsgefährdende Änderung. Auf diese Weise können Sie mehrere lang andauernde Workers parallel ausführen. WorkManager verwaltet auch die Lebensdauer der angegebenen Notifications besser. (b/145473554, aosp/1181208, asop/1181216, asop/1183577)

Fehlerkorrekturen

  • Ein Fehler in der AlarmManager-Implementierung, durch den Alarme nicht korrekt bereinigt wurden, wurde behoben. (aosp/1156444)
  • Es wurde ein Fehler behoben, bei dem eine leere Liste mit WorkRequests zum Erstellen einer falschen WorkContinuation-Kette führte. (b/142835274, aosp/1157051)

Abhängigkeitsänderungen

  • WorkManager verwendet jetzt Raum 2.2.2.

Version 2.3.0-beta01

20. November 2019

androidx.work:work-*:2.3.0-beta01 wurde veröffentlicht. Version 2.3.0-beta01 enthält diese Commits.

Neue Funktionen

  • Es wurde eine neue Lint-Regel hinzugefügt, die Entwicklerfehler aufgrund falscher Implementierung von androidx.work.Configuration.Provider bei der On-Demand-Initialisierung verhindert. aosp/1164559.

Version 2.3.0-alpha03

23. Oktober 2019

androidx.work:work-*:2.3.0-alpha03 wurde veröffentlicht. Version 2.3.0-alpha03 enthält diese Commits.

Neue Funktionen

  • Es wurde die WorkManager.createCancelPendingIntent() API hinzugefügt, die das Löschen von WorkRequests vereinfacht, ohne eine weitere Komponente in AndroidManifest.xml registrieren zu müssen. Mit dieser API ist es besonders einfach, WorkRequests von Notifications abzubrechen. Wir gehen davon aus, dass sie in Version 2.3.0 mit den neuen APIs im Vordergrund gekoppelt wird.
  • WorkManager ist jetzt auf androidx.room:*:2.2.0 (stabile Version) angewiesen.

API-Änderungen

  • ForegroundInfo.getNotificationType() wurde in ForegroundInfo.getForegroundServiceType() umbenannt, um die Konsistenz mit den zugrunde liegenden Plattform-APIs zu verbessern. (b/142729893, aosp/1143316)

Fehlerkorrekturen

  • Ein Fehler wurde behoben, der durch einen unnötigen Aufruf von setTransactionSuccessful() außerhalb einer Transaktion verursacht wurde. Dies kommt bei seltenen Migrationen vor. (b/142580433, aosp/1141737)

Version 2.3.0-alpha02

9. Oktober 2019

androidx.work:work-*:2.3.0-alpha02 wurde veröffentlicht. Version 2.3.0-alpha02 enthält diese Commits.

Neue Funktionen

  • WorkManager unterstützt jetzt die Ausführung länger andauernder oder wichtiger Arbeiten, die vom Betriebssystem aufrechterhalten werden sollen. Weitere Informationen finden Sie unter ListenableWorker#setForegroundAsync() (oder CoroutineWorker#setForeground() für Kotlin). (aosp/1133636)

API-Änderungen

  • Die containsKey API in Data wird in hasKeyWithValueOfType umbenannt. Die entsprechende Erweiterungsmethode in der ktx-Bibliothek wurde ebenfalls umbenannt. (b/141916545)

Fehlerkorrekturen

  • WorkManager-Zeitpläne funktionieren relativ gut, wenn sich die Anzahl der WorkRequests in der Warteschlange den Planungsbeschränkungen nähert. (aosp/1105766)
  • WorkManager ruft ListenableWorker#onStopped() nur dann auf, wenn die Arbeit noch nicht abgeschlossen ist. (b/140055777)
  • WorkManager entfernt nun Fortschrittsinformationen, wenn ein Worker unterbrochen wird oder seinen Endzustand erreicht. (aosp/1114572)
  • Data hat jetzt eine viel nützlichere toString()Darstellung. (b/140945323)
  • Data hat jetzt eine bessere equals()-Methode. Außerdem wird deepEquals für den Typ Array unterstützt. (b/140922528)
  • WorkManager speichert die interne Datenbank und die Dateien der Einstellungen jetzt in einem Verzeichnis ohne Sicherungskopie. (b/114808216)

Version 2.3.0-alpha01

22. August 2019

androidx.work:work-*:2.3.September 5, 20190-alpha01 wurde veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.

Neue Funktionen

  • ListenableWorker können jetzt über die setProgressAsync() API den Fortschritt festlegen. Außerdem wurden eine entsprechende suspend-ing setProgress API in CoroutineWorker und eine setProgress in RxWorker hinzugefügt, die eine Single<Void> zurückgibt. Mit diesen neuen APIs können Worker Fortschrittsinformationen über WorkInfo übertragen, das über eine entsprechende getProgress API verfügt. (b/79481554)
  • Data hat eine containsKey() API, mit der überprüft werden kann, ob Eingabedaten für Worker-Objekte Schlüssel mit dem erwarteten Typ enthalten. (b/117136838)
  • Data kann jetzt mit Data.toByteArray() und Data.fromByteArray() serialisiert werden. Beachten Sie, dass es für Data keine Versionsgarantien gibt. Sie sollten es also nicht beibehalten und auch nicht für IPC zwischen Anwendungen verwenden. Sie können nur zwischen mehreren Prozessen derselben Anwendung verwendet werden.
  • Neue Funktion, mit der über Configuration.setInputMergerFactory ein InputMergerFactory angegeben werden kann. (b/133273159)

API-Änderungen

  • WorkManager löst eine Instanz von IllegalStateException aus, wenn WorkerFactory eine Instanz von ListenableWorker zurückgibt, die zuvor aufgerufen wurde. (b/139554406)
  • Updates in der Dokumentation zur Stornierung von ListenableFuture und zum onStopped()-Callback in ListenableWorker. (b/138413671)

Fehlerkorrekturen

  • Der in Bearbeitung befindliche Planer ignoriert jetzt WorkRequests mit der Einschränkung idle. Diese Anfragen werden jetzt nur noch von JobScheduler aufgenommen, wenn das Gerät tatsächlich idle ist. (aosp/1089779)
  • TestScheduler verwendet jetzt die angegebene Executor korrekt für seinen internen Task-Executor in Tests. (aosp/1090749)

Version 2.2.0

Version 2.2.0

15. August 2019

androidx.work:work-*:2.2.0 wurde veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.

Dieser Release ist mit androidx.work:work-*:2.2.0-rc01 identisch.

Wichtige Änderungen in Version 2.2.0 von Version 2.1.0

androidx.work:work-gcm:2.2.0 ist ein neues Maven-Artefakt, das die Verwendung von GCMNetworkManager als Planer unterstützt, wenn Google Play-Dienste für API-Level <= 22 verfügbar sind. Dies ist eine optionale Abhängigkeit, die bei älteren API-Versionen für eine zuverlässigere und leistungsfähigere Hintergrundverarbeitung sorgt. Wenn Ihre App Google Play-Dienste verwendet, fügen Sie diese Abhängigkeit zu Ihrer Gradle-Datei hinzu, damit GCMNetworkManager automatisch unterstützt wird. Wenn Play-Dienste nicht verfügbar sind, greift WorkManager auf älteren Geräten weiterhin auf AlarmManager zurück.

Version 2.2.0-rc01

30. Juli 2019

androidx.work:work-*:2.2.0-rc01 wurde veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.

Fehlerkorrekturen

  • Es wurde ein Fehler in der AlarmManager-Implementierung behoben, der dazu führte, dass der Dienst vorzeitig heruntergefahren wurde und in seltenen Fällen eine RejectedExecutionException verursachte. (aosp/1092374) (b/138238197)
  • Es wurde eine Behelfslösung für ein NullPointerException hinzugefügt, wenn auf einigen Geräten JobScheduler APIs verwendet werden. (aosp/1091020) (b/138364061), (b/138441699)

Version 2.2.0-beta02

19. Juli 2019

androidx.work:work-*:2.2.0-beta02 wurde veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.

Fehlerkorrekturen

  • Unbeabsichtigte Jacoco-Abhängigkeit, die in 2.2.0-beta01 eingeführt wurde, wurde entfernt.

Version 2.2.0-beta01

17. Juli 2019

androidx.work:work-*:2.2.0-beta01 wurde veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.

Neue Funktionen

  • androidx.work:work-gcm:2.2.0-beta01 ist ein neues Maven-Artefakt, das die Verwendung von GCMNetworkManager als Planer unterstützt, wenn Google Play-Dienste für API-Level <= 22 verfügbar sind. Dies ist eine optionale Abhängigkeit, die bei älteren API-Versionen für eine zuverlässigere und leistungsfähigere Hintergrundverarbeitung sorgt. Wenn Ihre App Google Play-Dienste verwendet, fügen Sie diese Abhängigkeit zu Ihrer Gradle-Datei hinzu, damit GCMNetworkManager automatisch unterstützt wird. Wenn Play-Dienste nicht verfügbar sind, greift WorkManager auf älteren Geräten weiterhin auf AlarmManager zurück.

Fehlerkorrekturen

  • Fehlerkorrektur für IllegalArgumentException beim Verfolgen des Netzwerkstatus auf Nvidia Shield K1-Tablets. (aosp/1010188)

Version 2.1.0

Version 2.1.0

11. Juli 2019

androidx.work:work-*:2.1.0 wurde veröffentlicht. Dieser Release ist mit androidx.work:work-*:2.1.0-rc01 identisch.

Wichtige Änderungen seit Version 2.0.1

  • work-runtime-ktx erfordert jetzt Java 8. Sollten Probleme auftreten, können Sie Folgendes zu Ihrem build.gradle hinzufügen: kotlinOptions { jvmTarget = "1.8" }
  • On-Demand-Initialisierung für WorkManager hinzugefügt, die WorkManager erstellt wenn darauf verwiesen wird. b/127497100 So richten Sie Ihr Projekt für die On-Demand-Initialisierung ein:
    1. Deaktivieren Sie die automatische Initialisierung.
    2. Implementieren Sie Configuration.Provider in Ihrem benutzerdefinierten Application-Objekt.
    3. Alle Verweise von WorkManager.getInstance() ändern zu WorkManager.getInstance(Context). Im Rahmen dieser Änderung WorkManager.getInstance() wurde verworfen. Es ist immer sicherer, das neue Ersatz für WorkManager.getInstance(Context), auch wenn du gerade keine On-Demand-Initialisierung.
  • Für PeriodicWorkRequest werden jetzt anfängliche Verzögerungen unterstützt. Sie können die Methode setInitialDelay für PeriodicWorkRequest.Builder, um einen Anfangspunkt festzulegen Verzögerung. b/111404867
  • Es besteht jetzt die Möglichkeit, mit dem Befehl an einen oder mehrere registrierte WorkerFactorys zu delegieren DelegatingWorkerFactory. b/131435993
  • Es besteht jetzt die Möglichkeit, den Executor anzupassen, der von WorkManager verwendet wird für die gesamte interne Buchhaltung über Configuration.Builder.setTaskExecutor.
  • Funktion zum Erstellen von testbaren Einheiten Worker und ListenableWorker hinzugefügt Klassen mithilfe von TestWorkerBuilder und TestListenableWorkerBuilder in der Artefakt work-testing.
    • work-testing ruft Kotlin jetzt als Abhängigkeit ab. enthält standardmäßig mehrere Kotlin-Erweiterungen.
  • Anzahl der Ausführungsversuche zu WorkInfo hinzugefügt. b/127290461
  • Data-Typen können jetzt Byte und Byte-Arrays speichern und abrufen. Das bedeutet NICHT Maximale Größe von Data-Objekten ändern.
  • WorkManager ist jetzt auf Room 2.1.0 angewiesen, wodurch einige Datenbankprobleme behoben werden sollten.

Version 2.1.0-rc01

27. Juni 2019

androidx.work:work-*:2.1.0-rc01 wurde veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.

Fehlerkorrekturen

  • Es wurde ein Fehler behoben, bei dem eine Anwendung abstürzte, wenn Jobs mit JobScheduler während einer Sicherung ausgeführt wurden, b/135858602.

Version 2.1.0-beta02

20. Juni 2019

androidx.work:work-*:2.1.0-beta02 wurde veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.

Fehlerkorrekturen

  • TestListenableWorkerBuilder verwendet jetzt beim Erstellen von Instanzen von ListenableWorker die richtige WorkerFactory. b/135275844
  • Es wurde ein Fehler behoben, der zu Verschiebungen in den Ausführungsfenstern für WorkRequest Sekunden aufgrund von Prozessfehlern führte. b/135272196

Version 2.1.0-beta01

13. Juni 2019

androidx.work:work-*:2.1.0-beta01 wurde veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.

Fehlerkorrekturen

  • WorkManager ist jetzt auf Room 2.1.0 angewiesen, wodurch einige Datenbankprobleme behoben werden sollten.
  • Einige E/A-Vorgänge auf dem Startlaufwerk im Hauptthread wurden entfernt.
  • Ein potenzielles Deadlock beim Einschränkungs-Tracking wurde behoben. b/134361006
  • Vorbeugend abgebrochene ungültige Jobs, die WorkManager zugeordnet sind. b/134058261
  • JobScheduler APIs wurden einige defensive Aufrufe für fehlerhafte Geräte hinzugefügt.

Version 2.1.0-alpha03

5. Juni 2019

androidx.work:*:2.1.0-alpha03 wurde veröffentlicht.

Fehlerkorrekturen

  • Die Dokumentation für PeriodicWorkRequest wurde verbessert.
  • WorkManagerTestInitHelper verwendet jetzt den richtigen Hintergrund-Executor für Tests.
  • SQLite-Probleme bei großen Transaktionen auf einigen Geräten wurden behoben. (b/130182503)
  • Die Abhängigkeiten von WorkManager sind jetzt detaillierter. (b/133169148).
  • OEM-spezifische Fehler in der Implementierung von JobScheduler bei der Planung von Jobs mit WorkManager können umgangen werden.
  • Verbesserungen im AlarmManager-basierten Planer bezüglich Dienstlebensdauer, die zuvor seltene Abstürze verursachten. (b/133313734)

Version 2.1.0-alpha02

16. Mai 2019

WorkManager 2.1.0-alpha02 wird veröffentlicht. Diese Version enthält mehrere neue APIs.

API-Änderungen

  • Für PeriodicWorkRequest werden jetzt anfängliche Verzögerungen unterstützt. Sie können die Methode setInitialDelay für PeriodicWorkRequest.Builder, um einen Anfangspunkt festzulegen Verzögerung. b/111404867

  • Es besteht jetzt die Möglichkeit, mit dem Befehl an einen oder mehrere registrierte WorkerFactorys zu delegieren DelegatingWorkerFactory. b/131435993

  • Es besteht jetzt die Möglichkeit, den Executor anzupassen, der von WorkManager verwendet wird für die gesamte interne Buchhaltung über Configuration.Builder.setTaskExecutor.

  • Verbesserte Dokumentation rund um WorkRequest.keepResultsForAtLeast (b/130638001), On-Demand-Initialisierung und PeriodicWorkRequest.Builder (b/131711394).

Version 2.1.0-alpha01

24. April 2019

WorkManager 2.1.0-alpha01 wird veröffentlicht. Diese Version enthält mehrere neue APIs. Beachten Sie, dass es ab dieser Version neue Funktionen gibt, wird nicht auf die 1.x-Version zurückportiert. Wir empfehlen den Wechsel zu 2.x.

API-Änderungen

  • On-Demand-Initialisierung für WorkManager hinzugefügt, die WorkManager erstellt wenn darauf verwiesen wird. b/127497100 So richten Sie Ihr Projekt für die On-Demand-Initialisierung ein:
    1. Deaktivieren Sie die automatische Initialisierung.
    2. Implementieren Sie Configuration.Provider in Ihrem benutzerdefinierten Application-Objekt.
    3. Alle Verweise von WorkManager.getInstance() ändern zu WorkManager.getInstance(Context). Im Rahmen dieser Änderung WorkManager.getInstance() wurde verworfen. Es ist immer sicherer, das neue Ersatz für WorkManager.getInstance(Context), auch wenn du gerade keine On-Demand-Initialisierung.
  • Funktion zum Erstellen von testbaren Einheiten Worker und ListenableWorker hinzugefügt Klassen mithilfe von TestWorkerBuilder und TestListenableWorkerBuilder in der Artefakt work-testing.
    • work-testing ruft Kotlin jetzt als Abhängigkeit ab, aber auch enthält standardmäßig mehrere Kotlin-Erweiterungen.
  • Anzahl der Ausführungsversuche zu WorkInfo hinzugefügt. b/127290461
  • Data-Typen können jetzt Byte und Byte-Arrays speichern und abrufen. Das bedeutet NICHT Maximale Größe von Data-Objekten ändern.
  • CoroutineWorker.coroutineContext wurde verworfen. Dieses Feld wurde falsch eingegeben als CoroutineDispatcher; nicht mehr benötigen, da Sie den gewünschten coroutineContext selbst im Text der Anhaltenden Funktion.
  • RxWorker.createWork() und RxWorker.getBackgroundScheduler() sind jetzt die mit @NonNull-Rückgabetypen annotiert sind.

Version 2.0.1

Version 2.0.1

9. April 2019

WorkManager 2.0.1 wird veröffentlicht. Diese Version ist identisch mit 2.0.1-rc01

Version 2.0.1-rc01

3. April 2019

WorkManager 2.0.1-rc01 wird veröffentlicht. Diese Version enthält einige Fehlerkorrekturen. Für alten Version 1.x verwenden, sind einige dieser Änderungen auch in 1.0.1-rc01

Fehlerkorrekturen

  • Robolectric-Tests funktionieren jetzt ordnungsgemäß mit WorkManager. b/122553577
  • Ein Grenzfallabsturz wurde behoben, bei dem das Tracking von Einschränkungen für pre-JobScheduler APIs. b/129226383
  • Ein StackOverflowError für lange Arbeitsketten wurde behoben. b/129091233
  • Die Dokumentation für PeriodicWorkRequests wurde aktualisiert, um anzugeben, dass die Flex-Time wird von API 23 nicht unterstützt.
  • Einige fehlerhafte Links in der Kotlin-Dokumentation wurden behoben.

Version 2.0.0

Version 2.0.0

20. März 2019

WorkManager 2.0.0 wurde veröffentlicht. Diese Version ist mit 2.0.0-rc01 identisch und ist die AndroidX-Version von 1.0.0 mit AndroidX-Abhängigkeiten stabil ist. Wir empfehlen, auf diese Version statt auf die alten 1.x-Versionen ausgerichtet ist. Alle aktiven Die Entwicklung ist auf 2.x ausgerichtet und 1.x erhält nur kritische Fehlerkorrekturen für eine nur für kurze Zeit.

Version 2.0.0-rc01

7. März 2019

WorkManager 2.0.0-rc01 wird veröffentlicht. Diese Version ist mit der stabilen Version 1.0.0 identisch. hat aber AndroidX-Abhängigkeiten. Sobald dies die stabile Version 2.0.0 erreicht, sollten Sie diese Version einschließen und die alten 1.x-Versionen erhalten nur einige wichtige Fehlerkorrekturen. Die gesamte aktive Entwicklung wird auf 2.x ausgerichtet.

Abhängigkeiten vor AndroidX

Informationen zur Verwendung von Kotlin-Erweiterungen finden Sie in der KTX-Dokumentation
Referenzdokumente: Java

Cool

dependencies {
    def work_version = "1.0.1"

    // (Java only)
    implementation "android.arch.work:work-runtime:$work_version"

    // Kotlin + coroutines
    implementation "android.arch.work:work-runtime-ktx:$work_version"

    // optional - RxJava2 support
    implementation "android.arch.work:work-rxjava2:$work_version"
    // optional - Test helpers
    androidTestImplementation "android.arch.work:work-testing:$work_version"
}

Kotlin

dependencies {
    val work_version = "1.0.1"

    // (Java only)
    implementation("android.arch.work:work-runtime:$work_version")

    // Kotlin + coroutines
    implementation("android.arch.work:work-runtime-ktx:$work_version")

    // optional - RxJava2 support
    implementation("android.arch.work:work-rxjava2:$work_version")

    // optional - Test helpers
    androidTestImplementation("android.arch.work:work-testing:$work_version")
}

Version 1.0.1

Version 1.0.1

9. April 2019

WorkManager 1.0.1 wird veröffentlicht. Diese Version ist identisch mit 1.0.1-rc01

Wir empfehlen Nutzern dringend, auf WorkManager 2.x zu aktualisieren, da wird es in Zukunft nur noch sehr wenige Aktualisierungen für den 1.x-Zweig geben. Neue APIs werden auch nicht für die 1.x-Bibliothek veröffentlicht.

Version 1.0.1-rc01

2. April 2019

WorkManager 1.0.1-rc01 wird veröffentlicht. Diese Version enthält einige Fehlerkorrekturen.

Fehlerkorrekturen

  • Robolectric-Tests funktionieren jetzt ordnungsgemäß mit WorkManager. b/122553577
  • Ein Grenzfallabsturz wurde behoben, bei dem das Tracking von Einschränkungen für pre-JobScheduler APIs. b/129226383
  • Ein StackOverflowError für lange Arbeitsketten wurde behoben. b/129091233

Version 1.0.0

Version 1.0.0

5. März 2019

Dies ist die stabile Version 1.0.0 von WorkManager. Diese Version von WorkManager ist identisch mit 1.0.0-rc02.

Version 1.0.0-rc02

21. Februar 2019

Dies ist der zweite Releasekandidat für die stabile Version 1.0.0 von WorkManager. Diese Version enthält zwei Fehlerbehebungen.

Fehlerkorrekturen

  • Workers werden jetzt nach einem Anwendungsabsturz korrekt geplant. b/124546316

  • Worker-Objekte, die ein ungeprüftes Exception auslösen, sind jetzt korrekt als FAILED und stürzt den App-Prozess nicht mehr ab.

Version 1.0.0-rc01

14. Februar 2019

Dies ist ein Kandidat für die stabile Version 1.0.0 von WorkManager. Diese Version enthält eine Fehlerkorrektur.

Fehlerkorrekturen

  • Die AlarmManager-basierte Implementierung berücksichtigt jetzt flex-Fenster korrekt für PeriodicWorkRequests. b/124274584

Version 1.0.0-beta05

6. Februar 2019

Diese Version enthält einige Fehlerkorrekturen.

Fehlerkorrekturen

  • Ein Fall wurde behoben, bei dem JobScheduler.getPendingJob(...) in API 23 verwendet wurde. b/123893059
  • Fehler behoben: NullPointerException auf Geräten mit Android 5.1 (API-Level 22) oder niedriger. b/123835104

Version 1.0.0-beta04

4. Februar 2019

Diese Version enthält einige Fehlerkorrekturen.

Fehlerkorrekturen

  • Verbesserte Planung von PeriodicWork für die AlarmManager-basierte Implementierung.
  • Ein Problem wurde behoben, bei dem WorkManager Einschränkungen nicht richtig verfolgte, wenn mithilfe der AlarmManager-basierten Implementierung. b/123379508
  • Es wurde ein Fehler behoben, bei dem WorkManager die Arbeit nach dem Beenden eines Prozesses nicht wiederholen konnte, wenn mithilfe der AlarmManager-basierten Implementierung. b/123329850
  • Es wurde ein Fall behoben, bei dem WorkManager bei Verwendung der Auf AlarmManager basierende Implementierung.

Version 1.0.0-beta03

25. Januar 2019

Diese Version enthält einige Fehlerkorrekturen.

Fehlerkorrekturen

  • Es wurde eine Regressions-1.0.0-beta02 eingeführt, die dazu führte, dass die Arbeit nicht ausgeführt wurde in bestimmten Situationen richtig funktioniert. b/123211993
  • Ein Fall wurde behoben, bei dem das Backoff-Timing bei der Arbeit nicht richtig berücksichtigt wurde. b/122881597
  • Fehler behoben: ConcurrentModificationException auf Geräten mit Android 5.1 (API) oder) oder darunter liegen. Dies ist eine Fortsetzung der Korrektur in 1.0.0-beta02. b/121345393
  • exported=false für einige Komponenten in unserem Manifest hinzugefügt, die fehlten für diese Anmerkung.
  • Informationen darüber, wie WorkManager mit dem Betriebssystem interagiert, finden Sie im auf Paketebene.

Version 1.0.0-beta02

15. Januar 2019

Diese Version enthält einige Fehlerkorrekturen.

Fehlerkorrekturen

  • Es wurde ein Grenzfall behoben, bei dem regelmäßige Arbeiten mehrmals pro Intervall ausgeführt werden konnten. auf Geräten mit Android 6.0 (API-Level 23). b/121998363
  • Fehler behoben: ConcurrentModificationException auf Geräten mit Android 5.1 (API) Ebene 22) oder niedriger. b/121345393
  • Die fehlerhafte Ausführung von Arbeiten, wenn die Einschränkungen auf Geräten nicht erfüllt wurden, wurde behoben. mit Android 5.1 (API-Level 22) oder niedriger. b/122578012
  • Die Bearbeitung von Aufgaben wurde optimiert, um in einigen Grenzfällen schneller zu arbeiten. b/122358129
  • Es wurde eine Änderung hinzugefügt, um potenzielle Race-Bedingungen zwischen mehreren Instanzen zu beheben. von LiveData, die WorkManager verwendet.
  • Verschoben, um die Room-Abhängigkeit 1.1.1 anstelle von 1.1.1-rc01 zu verwenden. diese Versionen identisch sind. b/122578011

Version 1.0.0-beta01

19. Dezember 2018

Diese Version enthält keine API-Änderungen. Künftig bleibt WorkManager API bis zur nächsten Version stabil, sofern kein kritisches Problem auftritt. Diese Version enthält einige Fehlerkorrekturen.

Fehlerkorrekturen

  • Zuvor stornierte untergeordnete Elemente von erfolgreich abgeschlossenen übergeordneten Aufgaben werden nicht mehr ausgeführt. b/120811767
  • Korrekt initialisierte Logging-Klassen, die hauptsächlich während Tests angezeigt werden

Version 1.0.0-alpha13

12. Dezember 2018

Diese Version enthält eine kleinere API-Änderung, die für einige Nutzer von Kotlin hilfreich ist.

API-Änderungen

  • androidx.work.Result wurde zu einer inneren Klasse von ListenableWorker verschoben. Dadurch werden Refaktorierungskonflikte mit der übergeordneten Result-Klasse von Kotlin vermieden. Dies ist eine funktionsgefährdende API-Änderung. b/120564418

Nicht abwärtskompatible API-Änderungen

  • androidx.work.Result wurde zu einer inneren Klasse von ListenableWorker verschoben.

Version 1.0.0-alpha12

5. Dezember 2018

Diese Version enthält einige wichtige API-Änderungen. Weitere Informationen finden Sie unten im Abschnitt funktionsgefährdende API-Änderungen. Diese Version wird wahrscheinlich als erste Betaversion veröffentlicht. alpha12 enthält auch umfangreiche Aktualisierungen der Dokumentation.

API-Änderungen

  • Mit dem neuen Artefakt work-rxjava2 wird RxWorker eingeführt. Dies ist ein ListenableWorker, das eine Single<Payload> erwartet.
  • Firebase JobDispatcher wird nicht mehr unterstützt, da es demnächst eingestellt wird. Das bedeutet, dass das Artefakt „work-firebase“ im Laufe der Betaphase nicht mehr aktualisiert wird. Wir arbeiten daran, in Zukunft eine Alternative hinzuzufügen.
  • Payload in Result kombiniert. Result ist jetzt eine „siegelte Klasse“ mit drei konkreten Implementierungen, die Sie über Result.success() (oder Result.success(Data)), Result.failure() (oder Result.failure(Data)) und Result.retry() erhalten können. Ihre ListenableFuture-Ergebnisse ergeben jetzt Result statt Payload. Worker haben keine Getter- und Setter-Methoden für die Ausgabe Data. Das ist eine funktionsgefährdende Änderung.
  • Constraints.Builder.setTriggerContentMaxDelay(long, TimeUnit) und Constraints.Builder.setTriggerContentUpdateDelay(long, TimeUnit) sowie Varianten wurden hinzugefügt, um das langsame Auslösen von Inhalts-URIs besser zu unterstützen. b/119919774
  • WorkRequest.Builder.setBackoffCriteria(BackoffPolicy, Duration) Variante wurde hinzugefügt. Für diese Methode ist API 26 erforderlich.
  • Die Kotlin-Erweiterungsmethoden Operation.await() und ListenableFuture.await() wurden hinzugefügt.
  • Operation.getException() wurde in Operation.getThrowable() umbenannt. Das ist eine funktionsgefährdende Änderung.
  • Die ContentUriTriggers-Klasse und die Methoden, die darauf verweisen, sind nicht mehr öffentlich verfügbar. Das ist eine funktionsgefährdende Änderung.
  • Die restlichen varargs-Methoden in WorkManager, WorkContinuation und OneTimeWorkRequest wurden entfernt, um die API zu optimieren. Um Build-Probleme zu beheben, können Sie Ihre vorhandenen varargs mit Arrays.asList(...) zusammenfassen. Wir fügen immer noch Versionen jeder Methode mit einem Argument hinzu. Das ist eine funktionsgefährdende Änderung.
  • WorkContinuation.combine(OneTimeWorkRequest, *) Varianten wurden entfernt. Es wurde eine verwirrende API präsentiert. Die vorhandenen combine-Methoden sind verständlicher. Das ist eine funktionsgefährdende Änderung.

Fehlerkorrekturen

  • Pre-Marshmallow-Implementierungen sind jetzt zuverlässiger bei der Wiederherstellung nach dem Beenden eines Prozesses einer bereits laufenden Aufgabe.
  • LiveData, das über observeForever beobachtet wird, wird über WorkManager erfasst. Dies ist ein Backport-Problem einer Korrektur der Raumbibliothek. b/74477406
  • Data.Builder.build() löst jetzt eine Ausnahme aus, wenn das serialisierte Objekt seine maximale Größe überschreitet. Dies ist bisher nur in einem Hintergrundthread der Fall, wenn Sie ihn nicht richtig verarbeiten konnten.
  • Weitere Unterscheidung zwischen angehaltenen und stornierten Arbeiten getWorkInfoById() gibt während des ListenableWorker.onStopped() eine WorkInfo mit der CANCELLED State zurück.
  • null Results als Fehler in ListenableWorker behandeln. b/120362353
  • Spekulative Fehlerbehebung für Shield Tablets mit API 24, die manchmal eine IllegalArgumentException auslöste. b/119484416

Nicht abwärtskompatible API-Änderungen

  • Firebase JobDispatcher wird nicht mehr unterstützt, da es demnächst eingestellt wird. Das bedeutet, dass das Artefakt „work-firebase“ im Laufe der Betaphase nicht mehr aktualisiert wird. Wir arbeiten daran, in Zukunft eine Alternative hinzuzufügen.
  • Payload in Result kombiniert. Result ist jetzt eine „siegelte Klasse“ mit drei konkreten Implementierungen, die Sie über Result.success() (oder Result.success(Data)), Result.failure() (oder Result.failure(Data)) und Result.retry() erhalten können. Ihre ListenableFuture-Ergebnisse ergeben jetzt Result statt Payload. Worker haben keine Getter- und Setter-Methoden für die Ausgabe Data.
  • Die Kotlin-Erweiterungsmethoden Operation.await() und ListenableFuture.await() wurden hinzugefügt.
  • Operation.getException() wurde in Operation.getThrowable() umbenannt.
  • Die ContentUriTriggers-Klasse und die Methoden, die darauf verweisen, sind nicht mehr öffentlich verfügbar.
  • Die restlichen varargs-Methoden in WorkManager, WorkContinuation und OneTimeWorkRequest wurden entfernt, um die API zu optimieren. Um Build-Probleme zu beheben, können Sie Ihre vorhandenen varargs mit Arrays.asList(...) zusammenfassen. Wir fügen immer noch Versionen jeder Methode mit einem Argument hinzu.
  • WorkContinuation.combine(OneTimeWorkRequest, *) Varianten wurden entfernt. Es wurde eine verwirrende API präsentiert. Die vorhandenen combine-Methoden sind verständlicher.

Version 1.0.0-alpha11

8. November 2018

Diese Version enthält viele Änderungen, die zur stabilen API unter beta werden. In dieser Version gibt es wichtige API-Änderungen: Weitere Informationen finden Sie unten im Abschnitt funktionsgefährdende API-Änderungen.

API-Änderungen

  • Mit work-runtime-ktx wird eine neue CoroutineWorker eingeführt.
  • WorkStatus wurde in WorkInfo umbenannt. Alle entsprechenden getStatus-Methodenvarianten wurden in die entsprechende getWorkInfo Varianten. Das ist eine funktionsgefährdende Änderung.
  • ListenableWorker.onStopped() akzeptiert kein boolesches Argument mehr, das angibt, ob WorkRequest abgebrochen wurde. WorkManager macht diese Unterscheidung nicht mehr möglich. Das ist eine funktionsgefährdende Änderung.
  • androidx.work.test-Paket wurde in androidx.work.testing-Paket umbenannt. Das ist eine funktionsgefährdende Änderung.
  • Setter für Constraints sind nicht mehr Teil der öffentlichen API. Das ist eine funktionsgefährdende Änderung.
  • WorkerParameters.getTriggeredContentUris() und WorkerParameters.getTriggeredContentAuthorities() haben zuvor Arrays zurückgegeben. Jetzt geben diese Methoden Sammlungen zurück. Das ist eine funktionsgefährdende Änderung.
  • ListenableWorker.onStartWork() wurde in ListenableWorker.startWork() umbenannt. Das ist eine funktionsgefährdende Änderung.
  • Der Konstruktor für WorkStatus gehört nicht mehr zur öffentlichen API. Das ist eine funktionsgefährdende Änderung.
  • Configuration.getMaxJobSchedulerID() und Configuration.getMinJobSchedulerID() wurden in Configuration.getMinJobSchedulerId() umbenannt bzw. Configuration.getMaxJobSchedulerId(). Das ist eine funktionsgefährdende Änderung.
  • Der öffentlichen API wurden viele @NonNull-Annotationen hinzugefügt, um die Ergonomie der API zu verbessern.
  • Fügen Sie die WorkManager.enqueueUniqueWork() API hinzu, um eindeutige OneTimeWorkRequests in die Warteschlange zu stellen, ohne eine WorkContinuation erstellen zu müssen.
  • Alle Varianten der Methoden enqueue und cancel für WorkManager geben jetzt einen neuen Operation-Typ zurück. Das ist eine funktionsgefährdende Änderung.
  • Alle Varianten von enqueue akzeptieren keine varargs für WorkRequests mehr. Das ist eine funktionsgefährdende Änderung. Verwende stattdessen Sammlungen. Sie können Arrays.asList() verwenden, um vorhandenen Code zu ändern. Wir haben dies getan, um die API-Oberfläche und die Anzahl der Methoden zu reduzieren.
  • Wenn Sie mehr als einmal versuchen, WorkManager pro Prozess zu initialize, führt dies jetzt zu einem IllegalStateException. Das ist eine funktionsgefährdende Änderung.

Fehlerkorrekturen

  • WorkRequest.Builders im Artefakt work-runtime-ktx verwenden jetzt ListenableWorkers. Damit wird b/117666259 behoben.
  • Die nächste Ausführungszeit für PeriodicWork muss in der Zukunft liegen. Damit wird b/118204399 behoben.
  • Entfernen Sie potenzielle Laufwerks-E/A-Vorgänge, wenn beim Start der App WorkManager verwendet wird. Damit wird b/117796731 behoben.
  • Eine Race-Bedingung in WorkConstraintsTracker wurde korrigiert. Damit wird android-workmanager/issues/56 behoben.

Nicht abwärtskompatible API-Änderungen

  • WorkStatus wurde in WorkInfo umbenannt. Alle entsprechenden getStatus-Methodenvarianten wurden in die entsprechende getWorkInfo Varianten.
  • ListenableWorker.onStopped() akzeptiert kein boolesches Argument mehr, das angibt, ob WorkRequest abgebrochen wurde. WorkManager macht diese Unterscheidung nicht mehr möglich.
  • androidx.work.test-Paket wurde in androidx.work.testing-Paket umbenannt.
  • Setter für Constraints sind nicht mehr Teil der öffentlichen API.
  • WorkerParameters.getTriggeredContentUris() und WorkerParameters.getTriggeredContentAuthorities() haben zuvor Arrays zurückgegeben. Jetzt geben diese Methoden Sammlungen zurück.
  • ListenableWorker.onStartWork() wurde in ListenableWorker.startWork() umbenannt.
  • Der Konstruktor für WorkStatus gehört nicht mehr zur öffentlichen API.
  • Configuration.getMaxJobSchedulerID() und Configuration.getMinJobSchedulerID() wurden in Configuration.getMinJobSchedulerId() umbenannt bzw. Configuration.getMaxJobSchedulerId().
  • Alle Varianten der Methoden enqueue und cancel für WorkManager geben jetzt einen neuen Operation-Typ zurück.
  • Alle Varianten von enqueue akzeptieren keine varargs für WorkRequests mehr.
  • Wenn Sie mehr als einmal versuchen, WorkManager pro Prozess zu initialize, führt dies jetzt zu einem IllegalStateException.

Version 1.0.0-alpha10

11. Oktober 2018

Diese Version unterstützt von Entwicklern gesteuerte asynchrone Vorgänge. In dieser Version gibt es wichtige API-Änderungen: Weitere Informationen finden Sie unten im Abschnitt funktionsgefährdende API-Änderungen.

Wir gehen davon aus, dass sich WorkManager in der letzten Phase der Alphaphase befindet. Wir erwarten, dass die API in der Betaversion stabil sein wird. Bitte nehmen Sie sich die Zeit, um uns Feedback über unseren Issue Tracker zu senden.

API-Änderungen

  • Alle vorherigen deprecated-Methoden und -Klassen wurden entfernt, insbesondere der Worker-Standardkonstruktor. Dies ist eine funktionsgefährdende API-Änderung.
  • NonBlockingWorker wurde in ListenableWorker umbenannt. Diese Klasse ist jetzt eine eingeblendete öffentliche Klasse und kann verwendet werden.
    • ListenableWorker bietet Zugriff auf eine abstrakte Methode: ListenableFuture<Payload> onStartWork(), die im Hauptthread aufgerufen wird. Es liegt an Ihnen, die Arbeit asynchron zu starten und zu verarbeiten. Wenn Sie fertig sind, sollten Sie ListenableFuture entsprechend aktualisieren. Referenzimplementierungen von ListenableFuture sind im Paket Futures in alpha02 enthalten (siehe Abschnitt WorkManager).
    • Worker erweitert ListenableWorker und funktioniert weiterhin wie zuvor mit einer abstrakten Result doWork()-Methode.
    • Einige Methoden und Mitglieder wurden von Worker zu ListenableWorker zufällig angeordnet.
    • Wir werden bald Referenzimplementierungen für ListenableWorkers bereitstellen, die Kotlin-Koroutinen verwenden (sobald die stabilen Versionen veröffentlicht werden) und RxJava2.
  • Die Schnittstelle WorkerFactory und die konkrete Implementierung DefaultWorkerFactory wurden zu einer abstrakten Klasse namens WorkerFactory zusammengeführt. Durch die Implementierung wird das auf der Reflexion basierende Standardverhalten für alle vom Nutzer erstellten WorkerFactory-Instanzen als letzte Aktion aufgerufen. Das ist eine funktionsgefährdende Änderung.
  • WorkManager.synchronous() und WorkContinuation.synchronous() sowie alle zugehörigen Methoden wurden entfernt. ListenableFuture<Void> wurde als Rückgabetyp vieler Methoden in der API hinzugefügt. Dies ist eine funktionsgefährdende API-Änderung.
    • Sie können jetzt mithilfe von ListenableFutures synchron abrufen und beobachten. Beispiel: WorkManager.enqueue() wurde verwendet, um void zurückzugeben. wird jetzt ListenableFuture<Void> zurückgegeben. Sie können ListenableFuture.addListener(Runnable, Executor) oder ListenableFuture.get() aufrufen, um Code auszuführen, sobald der Vorgang abgeschlossen ist.
    • Diese ListenableFutures sagen nichts darüber aus, ob der Vorgang erfolgreich war oder fehlgeschlagen ist. dass sie auch fertig waren. Sie müssen trotzdem WorkManager-Methoden verketten, um diese Informationen zu erhalten.
    • cancel()-Aufrufe für diese Objekte werden ignoriert, da sie verwirrend und schwer zu verstehen sind. Brechen Sie den Vorgang oder die daraus resultierende Arbeit ab? Dies ist im Vertrag von Future enthalten.
    • Um die Einheitlichkeit mit den synchronen getStatus*-Methoden zu wahren, haben wir ListenableFuture-Varianten bereitgestellt und die vorhandenen, die LiveData zurückgegeben haben, so umbenannt, dass sie explizit „LiveData“ enthalten. als Teil des Namens enthalten (z. B. getStatusesByIdLiveData(UUID)). Dies ist eine funktionsgefährdende API-Änderung.

Fehlerkorrekturen

  • Das bekannte Problem von alpha09 bezüglich doppelter androidx-annotations.pro-Dateien wurde behoben. Sie können die Problemumgehung aus den vorherigen Versionshinweisen entfernen, indem Sie exclude 'META-INF/proguard/androidx-annotations.pro' aus Ihrer Gradle-Datei löschen.
  • Proguard-Konfigurationen wurden hinzugefügt, um den neuen Worker-Konstruktor beizubehalten. b/116296569
  • Potenzielle NullPointerException in einer Race-Bedingung beheben, bei der die Arbeit REPLACEd war. b/116253486 und b/116677275
  • WorkContinuation.combine() akzeptiert jetzt eine oder mehrere WorkContinuation statt zwei oder mehr. b/117266752

Nicht abwärtskompatible API-Änderungen

  • Alle vorherigen deprecated-Methoden und -Klassen wurden entfernt, insbesondere der Worker-Standardkonstruktor.
  • Die Schnittstelle WorkerFactory und die konkrete Implementierung DefaultWorkerFactory wurden zu einer abstrakten Klasse namens WorkerFactory zusammengeführt.
  • WorkManager.synchronous() und WorkContinuation.synchronous() wurden entfernt.
  • WorkManager.getStatus*()-Methoden geben jetzt ListenableFutures zurück. WorkManager.getStatus*LiveData() gibt LiveDatas zurück.

Version 1.0.0-alpha09

19. September 2018

Bekanntes Problem

Wenn das Problem „Mehr als eine Datei mit betriebssystemunabhängigem Pfad ‚META-INF/proguard/androidx-annotations.pro‘ gefunden wurde“ auftritt, fügen Sie als vorübergehende Problemumgehung Folgendes in Ihre Gradle-Datei ein, während wir das Problem in Alpha 10 beheben:

Cool

android {
    packagingOptions {
        exclude 'META-INF/proguard/androidx-annotations.pro'
    }
}

Kotlin

android {
    packagingOptions {
        exclude("META-INF/proguard/androidx-annotations.pro")
    }
}

Fehlerkorrekturen

  • Eine weitere Korrektur, die für „100 Jobs“ erforderlich war, wurde hinzugefügt. Fehler. b/115560696
  • Es wurden einige Fehler bei Fremdschlüsseleinschränkungen aufgrund von Race-Bedingungen behoben. b/114705286
  • Delegierte ConstraintTrackingWorker.onStopped(boolean)-Aufrufe an die zugrunde liegende Worker. b/114125093
  • Erzwingen Sie die korrekte minimale Backoff-Verzögerung für Firebase JobDispatcher. b/113304626
  • Verbesserte Threading-Garantien innerhalb der Bibliothek.
  • Korrigieren Sie das potenzielle Problem bei der internen Deduplizierung von LiveData.

API-Änderungen

  • Sie können jetzt zur Laufzeit eigene Worker-Instanzen erstellen. Geben Sie dazu eine WorkerFactory als Teil der WorkManager.Configuration an. Die Fallback-Factory ist DefaultWorkerFactory, was dem Verhalten vorheriger WorkManager-Versionen entspricht.
    • Die Standardkonstruktoren für Worker und NonBlockingWorker sind jetzt als veraltet markiert. Verwende den neuen Konstruktor (Worker(Context, WorkerParameters)) und rufe super(Context, WorkerParameters) auf. Bei zukünftigen WorkManager-Versionen wird der Standardkonstruktor entfernt.
  • Wir haben damit begonnen, das neue ListenableFuture-Artefakt intern zu verwenden (ohne Guava-Abhängigkeiten). In zukünftigen Releases werden wir ListenableFutures in die API einführen. Durch diese Änderung kann NonBlockingWorker später wieder eingeblendet werden.
  • Funktion zum Auslösen von Aufgaben mit zeitlicher Festlegung in TestDriver über TestDriver.setInitialDelayMet(UUID) und TestDriver.setPeriodDelayMet(UUID) hinzufügen. b/113360060

Nicht abwärtskompatible Änderungen

  • Die Standardkonstruktoren Worker und NonBlockingWorker wurden eingestellt. Migrieren Sie so bald wie möglich zum neuen Konstruktor. Zukünftige Versionen entfernen den Standardkonstruktor.

Version 1.0.0-alpha08

27. August 2018

Fehlerkorrekturen

  • WorkManager-Komponenten wurden ausdrücklich als nicht erkannter direkter Start gekennzeichnet, sodass sie beim direkten Start nicht ausgelöst werden. In Zukunft werden wir eine WorkManager-Version bereitstellen, die direkt bootfähig ist. b/112665532
  • Es wurde ein Problem behoben, durch das wiederholte Aufgaben nicht ausgeführt wurden. b/112604021
  • Regelmäßige Aufgaben, die nicht wiederholt ausgeführt wurden (im Zusammenhang mit dem oben genannten Problem), wurde behoben. b/112859683
  • Die Backoff-Richtlinien wurden eingehalten, wenn der App-Prozess bereits ausgeführt wird.
  • Ausnahmemeldungen in Data wurden korrigiert, um anzugeben, dass das Limit 10 KB beträgt.
  • Der Maximalwert von Configuration.setMaxSchedulerLimit(int) wurde auf 50 gesenkt, um eine gewisse Latenz bei der Verarbeitung von JobScheduler zu berücksichtigen. b/112817355

Version 1.0.0-alpha07

16. August 2018

Fehlerkorrekturen

  • Eine potenzielle SQL-Abfrage mit negativen Grenzwerten, die eine unbegrenzte Anzahl von Ergebnissen zurückgeben konnte, wurde korrigiert.
  • Arbeit, die bereits ausgeführt wurde, bricht nun korrekt alle ausstehenden Kopien dieser Arbeit in anderen Planern ab. Dadurch wurde das Limit von JobScheduler Jobs überschritten. b/111569265
  • ConcurrentModificationException in ConstraintTracker korrigiert. b/112272753
  • Die Rückgabetyp-Annotationen von Data.getBooleanArray(String) und Data.getIntArray(String) wurden in @Nullable statt in @NonNull geändert. b/112275229

API-Änderungen

  • Worker erweitert jetzt die neue Klasse NonBlockingWorker. Dies hat keine Auswirkungen auf die aktuelle Nutzung. In Zukunft wird NonBlockingWorker zu einer vollständig unterstützten Entität für Lösungen für benutzerdefinierte Threading.
  • Die Rückgabetyp-Annotationen von Data.getBooleanArray(String) und Data.getIntArray(String) wurden in @Nullable statt in @NonNull geändert. b/112275229
  • Kotlin-Erweiterungen: Wir haben Map.toWorkData() eingestellt und eine workDataOf(vararg Pair<String, Any?>) auf oberster Ebene hinzugefügt, um die Konsistenz mit vorhandenen APIs zu verbessern.

Version 1.0.0-alpha06

1. August 2018

Fehlerkorrekturen

  • Verhindern Sie bei der Planung von Arbeiten eine Datenbanksperre. b/111801342
  • Es wurde ein Fehler behoben, der dazu führte, dass PeriodicWork im Stromsparmodus nicht planmäßig ausgeführt wird. b/111469837
  • Eine Race-Bedingung beim Verfolgen von Einschränkungen, die WorkManager zum Absturz führen, wurde behoben. googlecodelabs/android-workmanager/issues/56
  • Erstellen Sie eindeutige WorkRequests, wenn Sie WorkRequest.Builder#build() verwenden. b/111408337
  • Aktiviert die Verwendung von RescheduleReceiver nur, wenn es WorkRequests gibt, die sie benötigen. b/111765853

Version 1.0.0-alpha05

24. Juli 2018

API-Änderungen

  • WorkManager.getInstance() ist jetzt mit @NonNull statt mit @Nullable gekennzeichnet. Wenn das Singleton-Element bei manueller Initialisierung nicht richtig initialisiert wird, löst die Methode stattdessen einen IllegalStateException aus. Dies ist ein funktionsgefährdende API-Änderung.
  • Die neue API Configuration.Builder.setMinimumLoggingLevel(int) wurde hinzugefügt, mit der die Ausführlichkeit von WorkManager gesteuert werden kann. Standardmäßig protokolliert WorkManager Log.INFO und höher.
  • Die Signatur von Data.getString() wurde so geändert, dass kein Standardwert mehr verwendet wird (implizit ist dies null). Dies ist eine funktionsgefährdende API-Änderung.
  • Einige Methoden, die nur für die interne Nutzung erforderlich sind, wurden als @hide gekennzeichnet. Dazu gehören der Constraints-Konstruktor, Data.toByteArray() und Data.fromByteArray(byte[]). Dies ist eine funktionsgefährdende API-Änderung.

Fehlerkorrekturen

  • WorkManager führt bei bekannten Fällen der automatischen Sicherung keine Arbeit mehr aus. Dies könnte zu einem Absturz geführt haben. b/110564377
  • Doppelte Planung von PeriodicWorkRequests bei Verwendung von JobScheduler wurde behoben. b/110798652
  • Es wurde ein Problem behoben, bei dem PeriodicWorkRequests nach dem Stromsparmodus des Geräts nicht korrekt ausgeführt wurden. b/111469837
  • Es wurde ein Problem mit anfänglichen Verzögerungen bei der Verwendung von Firebase JobDispatcher behoben. b/111141023
  • Einige potenzielle Race-Bedingungen und Timing-Probleme wurden behoben.
  • BroadcastReceivers, die nicht mehr benötigt wurden, wurden korrekt freigegeben.
  • Die Leistung bei der Neuplanung wurde optimiert, wenn Apps nach dem erzwungenen Schließen neu gestartet werden.
  • TestScheduler.setAllConstraintsMet(UUID) darf vor oder nach Einreihung der angegebenen WorkRequest in die Warteschlange aufgerufen werden. b/111238024

Nicht abwärtskompatible Änderungen

  • WorkManager.getInstance() ist jetzt mit @NonNull statt mit @Nullable gekennzeichnet.
  • Die Signatur von Data.getString() wurde so geändert, dass kein Standardwert mehr verwendet wird (implizit ist dies null).
  • Einige Methoden, die nur für die interne Nutzung erforderlich sind, wurden als @hide gekennzeichnet. Dazu gehören der Constraints-Konstruktor, Data.toByteArray() und Data.fromByteArray(byte[]).

Version 1.0.0-alpha04

26. Juni 2018

Fehlerkorrekturen

  • PeriodicWorkRequests werden jetzt korrekt neu geplant, wenn die AlarmManager-basierte Implementierung verwendet wird.
  • Ein möglicher ANR-Fehler beim Verschieben aller Worker nach einem erzwungenen Beenden oder einem Neustart wurde behoben. b/110507716
  • Verschiedene WorkManager-APIs wurden um Anmerkungen zur Null-Zulässigkeit hinzugefügt. b/110344065
  • Nicht abgefangene Ausnahmen protokollieren, die während der Worker-Ausführung auftreten. b/109900862
  • destruktive Datenbankmigrationen sind zulässig, falls Sie ein Rollback auf eine ältere Version von WorkManager durchführen. b/74633270
  • Ein Migrationsabsturz beim Erstellen doppelter impliziter Tags wurde behoben. Dies ist ein sehr seltenes Problem, das nur aufgetreten ist, wenn Sie selbst dasselbe implizite Tag-Format verwendet haben.

Version 1.0.0-alpha03

19. Juni 2018

Fehlerkorrekturen

  • Eine Race-Bedingung in der AlarmManager-basierten Implementierung wurde behoben. b/80346526.

  • Doppelte Jobs bei Verwendung von JobScheduler nach einem Geräteneustart wurden behoben.

  • Jobs mit Inhalts-URI-Triggern bleiben jetzt auch nach einem Neustart bestehen. b/80234744

  • Aktualisierungen der Dokumentation b/109827628, b/109758949, b/80230748

  • Ein Absturz beim erneuten Einreihen einer WorkRequest in die Warteschlange wurde behoben. b/109572353.

  • Die Kotlin-Compiler-Warnungen bei Verwendung der work-runtime-ktx-Abhängigkeit wurden behoben.

  • WorkManager verwendet jetzt Room-Version 1.1.1-rc1.

API-Änderungen

  • getStatusesSync(), die synchrone Version von WorkContinuation.getStatuses(), wurde hinzugefügt.
  • Worker kann zwischen einer vom Nutzer initiierten Kündigung und einer vorübergehenden vom Betriebssystem angeforderten Beendigung unterscheiden. Worker.isStopped() gibt true zurück, wenn eine Art von Stopp angefordert wurde. Worker.isCancelled() gibt true zurück, wenn die Arbeit explizit abgebrochen wurde. b/79632247
  • Unterstützung für JobParameters#getNetwork() auf API 28 hinzugefügt. Dies wird über Worker.getNetwork() bereitgestellt.
  • Configuration.Builder.setMaxSchedulerLimit(int maxSchedulerLimit) wurde hinzugefügt, damit Sie erzwingen können, wie viele Jobs an JobScheduler oder AlarmManager gesendet werden können. So wird verhindert, dass WorkManager alle verfügbaren JobScheduler-Slots belegt.
  • Configuration.setJobSchedulerJobIdRange(int minJobSchedulerId, int maxJobSchedulerId) wurde hinzugefügt, mit dem ein Bereich von JobScheduler-Job-IDs definiert werden kann, die für WorkManager sicher sind. b/79996760
  • Worker.getRunAttemptCount() gibt die aktuelle Anzahl von Ausführungen für eine bestimmte Worker zurück. b/79716516
  • Mit WorkManager.enqueueUniquePeriodicWork(String uniqueWorkName, ExistingPeriodicWorkPolicy existingPeriodicWorkPolicy, PeriodicWorkRequest periodicWork) können Sie eindeutige PeriodicWorkRequests in die Warteschlange stellen. b/79600647
  • WorkManager.cancelAllWork() bricht alle Workers ab. Bibliotheken, die von WorkManager abhängig sind, können abfragen, wann diese Methode zuletzt aufgerufen wurde. Dazu wird WorkManager.getLastCancelAllTimeMillis() zur zusätzlichen Bereinigung des internen Status verwendet.
  • WorkManager.pruneWork() wurde hinzugefügt, um abgeschlossene Jobs aus der internen Datenbank zu entfernen. b/79950952, b/109710758

Änderungen im Verhalten

  • Es wurde ein implizites Tag für alle WorkRequest hinzugefügt. Dies ist der voll qualifizierte Klassenname für die Worker. Dadurch können Sie WorkRequests ohne tags entfernen oder wenn id nicht verfügbar ist. b/109572351

Nicht abwärtskompatible Änderungen

  • Worker.WorkerResult wurde in Worker.Result umbenannt.
  • Worker.onStopped hat jetzt einen zusätzlichen isCancelled-Parameter, der auf true gesetzt wird, wenn Worker explizit abgebrochen wurde.

Version 1.0.0-alpha02

24. Mai 2018

Fehlerkorrekturen

  • Ein NullPointerException-Fehler in State.isFinished() wurde behoben. b/79550068
  • Es wurde ein Problem behoben, durch das Workers auf Application.onCreate() verschoben wurden. b/79660657
  • Es wurde ein Problem behoben, bei dem Sie mehr Arbeiten planen konnten, als vom Betriebssystem zugelassen ist. b/79497378
  • Die Bereinigung von Wakelocks, die mit Workers verknüpft sind, wurde in den Hintergrundthread verschoben.
  • Die AlarmManager-Implementierung wird jetzt korrekt bereinigt, wenn alle ausstehenden Arbeiten abgeschlossen sind.
  • Bereinigungs-SQL-Abfragen, die nicht englische Sprachen betrafen, wurden behoben. b/80065360
  • Unterstützung für floats in Data hinzugefügt. b/79443878
  • Data.Builder.putAll() gibt jetzt eine Instanz von Builder zurück. b/79699162
  • Weitere Javadoc-Funktionen und Fehlerbehebungen finden Sie in der Dokumentation. b/79691663

API-Änderungen

  • Worker können reagieren, wenn sie angehalten wurden. Mit Worker.isStopped() kann geprüft werden, ob eine Worker angehalten wurde. Mit Worker.onStopped() können einfache Bereinigungsvorgänge ausgeführt werden.
  • Die Worker.getTags() API gibt eine Set von Tags zurück, die mit Worker verknüpft sind.
  • Es wurden javax.time.Duration-Überlastungen für APIs hinzugefügt, die eine Kombination aus Dauer und TimeUnits nehmen. Dieser wird von @RequiresApi(26) geschützt.
  • WorkManager Erweiterungen wurden aus dem Paket „androidx.work.ktx“ in das Paket „androidx.work“ verschoben. Die alten Erweiterungen werden nicht mehr unterstützt und in einer zukünftigen Version entfernt.
  • Configuration.withExecutor() wurde verworfen. Verwende stattdessen Configuration.setExecutor().

Version 1.0.0-alpha01

8. Mai 2018

WorkManager vereinfacht die Planung und Ausführung von garantierten und einschränkungssensitiven Hintergrundarbeit. Diese erste Version ist 1.0.0-alpha01.