WorkManager

Interfejs WorkManager API ułatwia planowanie opóźnionych, asynchronicznych zadań, które muszą być wykonywane niezawodnie. Te interfejsy API umożliwiają tworzenie zadań i przekazywanie ich do WorkManagera do wykonania, gdy zostaną spełnione ograniczenia pracy.
Ostatnia aktualizacja Wersja stabilna Wersja kandydująca do publikacji Wersja Beta Wersja alfa
23 kwietnia 2025 r. 2.10.1 - - -

Deklarowanie zależności

Aby dodać zależność od WorkManager, musisz dodać do projektu repozytorium Google Maven:

Dodaj zależności dla artefaktów, których potrzebujesz, w pliku build.gradle aplikacji lub modułu:

dependencies {
    def work_version = "2.10.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"
}
dependencies {
    val work_version = "2.10.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")
}

Informacje o korzystaniu z rozszerzeń Kotlina znajdziesz w dokumentacji ktx.

Więcej informacji o zależnościach znajdziesz w artykule Dodawanie zależności kompilacji.

Opinia

Twoja opinia pomoże nam ulepszyć Jetpacka. Jeśli zauważysz nowe problemy lub masz pomysły na ulepszenie tej biblioteki, daj nam znać. Zanim utworzysz nowy problem, zapoznaj się z dotychczasowymi problemami w tej bibliotece. Możesz zagłosować na istniejący problem, klikając przycisk z gwiazdką.

Tworzenie nowego zgłoszenia

Więcej informacji znajdziesz w dokumentacji narzędzia Issue Tracker.

Wersja 2.10

Wersja 2.10.1

23 kwietnia 2025 r.

Element androidx.work:work-*:2.10.1 został zwolniony. Wersja 2.10.1 zawiera te komity.

Poprawki błędów

  • Zmniejsz prawdopodobieństwo wystąpienia błędu TooManyRequestsException podczas rejestracji WorkManagerNetworkCallback używanym do śledzenia ograniczeń. ((b/231499040)[https://issuetracker.google.com/231499040], b309d5).

Wersja 2.10.0

30 października 2024 r.

Element androidx.work:work-*:2.10.0 został zwolniony. Wersja 2.10.0 zawiera te komity.

Znaczące zmiany od wersji 2.9.1

  • Dodano tagi śledzenia do zadań z WorkManager, dzięki czemu polecenie „adb shell dumpsys jobscheduler” jest dużo łatwiejsze do zrozumienia, ponieważ zawiera nazwę wykonywanego zadania. Dodano też sekcje śledzenia wokół kluczowych obszarów WorkManager.
  • Dodano element sterujący Configuration.workerCoroutineContext do kontrolowania modułu rozsyłającego, w którym wykonywane jest działanie CoroutineWorker.
  • Deweloperzy mogą określić NetworkRequest jako ograniczenie dla pracownika za pomocą metody Constraints.setRequiredNetworkRequest. Dzięki temu możesz dokładniej określić, w której sieci ma działać ta instancja robocza.
  • WorkManager Wersja 2.10.0 jest teraz skompilowana z pakietem SDK 35 i zawiera różne zmiany zapewniające zgodność z tym pakietem.

Wersja 2.10.0-rc01

24 października 2024 r.

Element androidx.work:work-*:2.10.0-rc01 został zwolniony. Wersja 2.10.0-rc01 zawiera te komity.

Wersja 2.10.0-beta01

2 października 2024 r.

Element androidx.work:work-*:2.10.0-beta01 został zwolniony. Wersja 2.10.0-beta01 zawiera te komity.

Wersja 2.10.0-alpha04

18 września 2024 r.

Element androidx.work:work-*:2.10.0-alpha04 został zwolniony. Wersja 2.10.0-alpha04 zawiera te komity.

Zmiany w interfejsie API

  • Dodaj powód zatrzymania STOP_REASON_FOREGROUND_SERVICE_TIMEOUT, gdy instancja robocza na pierwszym planie zostanie zatrzymana z powodu limitu czasu wykonania na podstawie typu usługi na pierwszym planie. (Ibd0af)

Wersja 2.10.0-alpha03

4 września 2024 r.

Element androidx.work:work-*:2.10.0-alpha03 został zwolniony. Wersja 2.10.0-alpha03 zawiera te komity.

Nowe funkcje

  • Dodano tagi śledzenia do zadań z WorkManager, dzięki czemu polecenie „adb shell dumpsys jobscheduler” jest dużo łatwiejsze do zrozumienia, ponieważ zawiera nazwę wykonywanego zadania. Dodano też sekcje śledzenia wokół kluczowych obszarów WorkManager.

Zmiany w interfejsie API

  • WorkManager 2.10.0 jest teraz kompilowany z pakietem SDK 35.
  • Napraw problem z usługami na pierwszym planie typu „short service” i „data sync”, które powodują przekroczenie limitu czasu i wywołują ANR, gdy WorkManager nie wywołuje stopSelf(). Ta poprawka dotyczy tylko urządzeń z interfejsem API 34 i 35, na których wprowadzono typy usług działających na pierwszym planie. (ca06b2, b/364508145)
  • Nowe interfejsy API WorkerParameters, które umożliwiają przełączanie procesu zdalnego, do którego Worker się łączy podczas korzystania z WorkerFactory. (Ibdc8a, Ie8a90, I7373f)

Poprawki błędów

  • Rozwiązanie problemu z awarią spowodowaną przez WorkManager próbę ponownego uruchomienia długotrwałego zadania (czyli zadania na pierwszym planie), gdy typ zadania na pierwszym planie miał uprawnienia wymagane przez Androida 14, które zostały cofnięte. (b/333957914)
  • Usunięto ręczne określanie dostępu do nowych interfejsów API platformy, ponieważ odbywa się to automatycznie za pomocą modelowania interfejsu API podczas korzystania z R8 z AGP 7.3 lub nowszym (np. R8 w wersji 3.3) oraz we wszystkich wersjach kompilacji przy użyciu AGP 8.1 lub nowszego (np. D8 w wersji 8.1). Klienci, którzy nie korzystają z AGP, powinni zaktualizować D8 do wersji 8.1 lub nowszej. Więcej szczegółów znajdziesz w tym artykule. (Ia60e0, b/345472586)

Wersja 2.10.0-alpha02

17 kwietnia 2024 r.

Element androidx.work:work-*:2.10.0-alpha02 został zwolniony. Wersja 2.10.0-alpha02 zawiera te komity.

Zmiany w interfejsie API

  • Dodaliśmy możliwość emitowania zakresów śladu za pomocą konfigurowalnego elementu @RestrictTo Tracer w komponencie WorkManager. (I17d7f, b/260214125)
  • Dodano element sterujący Configuration.workerCoroutineContext do kontrolowania modułu rozsyłającego, w którym wykonywane jest działanie CoroutineWorker. Pomaga to całkowicie uniknąć użycia Dispatchers.Default w elementach WorkManager. (Icd1b7)
  • Dodaj niestandardowe moduły obsługi wyjątków dla Workers (Ib1b74, b/261190695)
  • Funkcje OneTimeWorkRequest.BuilderPeriodicWorkRequest.Builder można teraz tworzyć za pomocą argumentu KClass zamiast Class: val request = OneTimeWorkRequest.Builder(Worker::class).setConstraints(...).build() (Ib55f6)
  • Klasa WorkManager została przeniesiona do Kotlina. Teraz metody zwracające LiveData, ListenableFuture lub Flow zawierają prawidłowe informacje o możliwości występowania wartości null. Może to wymagać wprowadzenia zmian w kodzie źródłowym klienta, jeśli założenia dotyczące możliwości występowania wartości null w tym kodzie były nieprawidłowe. (If6757)

Wersja 2.10.0-alpha01

24 stycznia 2024 r.

Element androidx.work:work-*:2.10.0-alpha01 został zwolniony. Wersja 2.10.0-alpha01 zawiera te commity.

Nowe funkcje

  • Deweloperzy mogą określić NetworkRequest jako ograniczenie dla pracownika za pomocą metody Constraints.setRequiredNetworkRequest. Dzięki temu możesz dokładniej określić, w której sieci ma działać ta instancja robocza.

Zmiany w interfejsie API

  • Dodanie możliwości określenia NetworkRequest jako ograniczenia. (Id98a1, b/280634452)

Wersja 2.9

Wersja 2.9.1

7 sierpnia 2024 r.

Element androidx.work:work-*:2.9.1 został zwolniony. Wersja 2.9.1 zawiera te komity.

Poprawki błędów

  • Rozwiązanie problemu awarii spowodowanej przez WorkManager próbę ponownego uruchomienia długotrwałego wątku (czyli wątku na pierwszym planie), gdy typ pracy na pierwszym planie miał wymagania wstępne Androida 14, które zostały cofnięte. (b/333957914)

Wersja 2.9.0

29 listopada 2023 r.

Element androidx.work:work-*:2.9.0 został zwolniony. Wersja 2.9.0 zawiera te commity.

Ważne zmiany od wersji 2.8.0

  • Dostrzegalność za pomocą Flow. Zamiast LiveData postępy pracownika można teraz obserwować za pomocą metod WorkManager.getWorkInfosFlow i podobnych metod.
  • Teraz WorkManager zawiera wskazówkę, dlaczego usługa worker została wcześniej zatrzymana. Możesz go użyć, aby zapytać o dane dotyczące pracownika za pomocą metody getStopReason() lub WorkInfo za pomocą metody getStopReason().
  • Dokładne planowanie pracy pracowników okresowych za pomocą setNextScheduleTimeOverride. Umożliwia to dynamiczne obliczanie kolejnego harmonogramu pracy okresowej, który można wykorzystać do implementacji zaawansowanych funkcji, takich jak adaptacyjne czasy odświeżania, niestandardowe zachowanie prób ponownego wykonania czy uruchamianie zadania dotyczącego kanału z wiadomościami przed każdym porannym wstaniem użytkownika bez przesunięcia. Aby uniknąć anulowania obecnie działającego zadania podczas planowania kolejnego, należy używać funkcji ExistingPeriodicWorkPolicy.UPDATE.
  • Testowanie WorkManagera z wykorzystaniem wątków dopasowanych do wersji produkcyjnej. ExecutorsMode.PRESERVE_EXECUTORS można używać w funkcji initializeTestWorkManager, aby zachować wykonawców ustawionych w funkcji Configuration i używać rzeczywistego wątku głównego.
  • Interfejsy coroutines API, takie jak CoroutineWorker, zostały przeniesione z dodatkowego artefaktu work-runtime-ktx do głównego artefaktu work-runtime. work-runtime-ktx jest teraz pusty.

Zmiany w interfejsie API

  • Do grupy WorkInfo został dodany użytkownik stopReason. Dostęp do funkcji stopReason jest możliwy po uruchomieniu instancji roboczej. Może to być przydatne w raportowaniu stopReason, ponieważ po zatrzymaniu wątku sama aplikacja może zostać bardzo szybko zamknięta. (I21386)
  • Umożliw ustawienie parametru Clock w konfiguracji i używanie go do określania kolejności wykonywania testów Worker. (Ic586e)
  • Do metody getStopReason() dodano metodę ListenableWorker, która wskazuje, dlaczego instancja robocza została zatrzymana. (I07060)
  • Dodano WorkManagerTestInitHelper#closeWorkDatabase(), aby uniknąć ostrzeżenia Closeguard o wycieku zasobów. (Ia8d49)
  • Konstruktor klasy WorkInfo jest teraz publiczny, co może być przydatne podczas testowania. (Ia00b6, b/209145335)
  • Plik work-runtime-ktx jest teraz pusty, a plik CoroutineWorker i inne narzędzia do Kotlina są teraz dostępne w głównym artefakcie pracy w czasie wykonywania. (I71a9a)
  • Dodano metodę setNextScheduleTimeOverride, która umożliwia dokładne ustawianie okresowych harmonogramów pracy (I3b4da).
  • Dodano getNextScheduleTimeMillis, aby uzyskać informacje o planowanym czasie działania, do WorkInfo. (I797e4)
  • Informacje o początkowym opóźnieniu i częstotliwości są dodawane do WorkInfo. (I52f2f)
  • Dodano metodę observe workers via Flows via methods getWorkInfosByTagFlow, getWorkInfoByIdFlow, getWorkInfosForUniqueWorkFlow, getWorkInfosFlow (If122a)
  • Do konstruktorów i właściwości Constraints dodano brakujące adnotacje @RequiresApi(...). Zostały one dopasowane do odpowiednich adnotacji w metodach Constraints.Builder, które istniały już w wcześniejszych wersjach WorkManager. (I6d7d2)
  • WorkManager ma teraz osobny limit dla pracowników zajmujących się uri treści, aby zapewnić im gwarantowane sloty w JobScheduler i zapobiec braku aktualizacji treści w przypadku dużego obciążenia. Limit można skonfigurować za pomocą Configuration.Builder.setContentUriTriggerWorkersLimit. (Ic128f)
  • Do WorkInfo dodano ograniczenia. (I162c0)

Wersja 2.9.0-rc01

18 października 2023 r.

Element androidx.work:work-*:2.9.0-rc01 został zwolniony. Wersja 2.9.0-rc01 zawiera te zatwierdzenia.

  • Brak zmian od ostatniej wersji beta

Wersja 2.9.0-beta01

6 września 2023 r.

Element androidx.work:work-*:2.9.0-beta01 został zwolniony. Wersja 2.9.0-beta01 zawiera te commity.

Zmiany w interfejsie API

Wersja 2.9.0-alpha02

26 lipca 2023 r.

Element androidx.work:work-*:2.9.0-alpha02 został zwolniony. Wersja 2.9.0-alpha02 zawiera te commity.

Nowe funkcje

  • Teraz WorkManager zawiera wskazówkę, dlaczego usługa worker została wcześniej zatrzymana. Możesz go użyć, aby zapytać o dane dotyczące pracownika za pomocą metody getStopReason() lub WorkInfo za pomocą metody getStopReason().

Zmiany w interfejsie API

  • Do grupy WorkInfo został dodany użytkownik stopReason. Udostępnia ona dane stopReason po uruchomieniu instancji roboczej. Może to być przydatne w raportowaniu stopReason, ponieważ po zatrzymaniu zadania podrzędnego sama aplikacja może zostać bardzo szybko zamknięta. (I21386)
  • Zezwalanie na ustawianie zegara za pomocą konfiguracji i używanie go do określania kolejności wykonywania testów Worker. (Ic586e)
  • Do metody getStopReason() dodano metodę ListenableWorker, która wskazuje, dlaczego instancja robocza została zatrzymana. (I07060)
  • Dodano WorkManagerTestInitHelper#closeWorkDatabase(), aby uniknąć ostrzeżenia Closeguard o wycieku zasobów. (Ia8d49)

Poprawki błędów

  • Dodano możliwość pominięcia overrideNextScheduleTime za pomocą TestDriver oraz rozwiązano problemy z testowalnością. (Ic2905)

Wersja 2.9.0-alpha01

7 czerwca 2023 r.

Element androidx.work:work-*:2.9.0-alpha01 został zwolniony. Wersja 2.9.0-alpha01 zawiera te commity.

Nowe funkcje

  • Dostrzegalność za pomocą Flow. Zamiast LiveData postępy pracownika można teraz obserwować za pomocą metod WorkManager.getWorkInfosFlow i podobnych metod.
  • Dokładne planowanie pracy pracowników okresowych za pomocą setNextScheduleTimeOverride. Umożliwia to dynamiczne obliczanie kolejnego harmonogramu pracy okresowej, który można wykorzystać do implementacji zaawansowanych funkcji, takich jak adaptacyjne czasy odświeżania, niestandardowe zachowanie prób ponownego wykonania czy uruchamianie zadania dotyczącego kanału z wiadomościami przed każdym porannym wstaniem użytkownika bez przesunięcia. Aby uniknąć anulowania obecnie działającego zadania podczas planowania następnego, należy używać funkcji ExistingPeriodicWorkPolicy.UPDATE.
  • WorkManager testuje wątki z wykorzystaniem produkcji. ExecutorsMode.PRESERVE_EXECUTORS można użyć, aby zachować wykonawców ustawionych w Configuration i używać rzeczywistego wątku głównego.
  • Interfejsy API dotyczące coroutines, takie jak CoroutineWorker, zostały przeniesione z dodatkowego artefaktu work-runtime-ktx do głównego artefaktu work-runtime. work-runtime-ktx jest teraz pusty.

Zmiany w interfejsie API

  • Konstruktor WorkInfo jest teraz publiczny, co może być przydatne podczas testowania. (Ia00b6, b/209145335)
  • work-runtime-ktx jest teraz pusty, a CoroutineWorker i inne narzędzia do obsługi Kotlina są teraz dostępne w głównym pliku work-runtime. (I71a9a)
  • Dodano metodę setNextScheduleTimeOverride, która umożliwia dokładne ustawianie okresowych harmonogramów pracy (I3b4da).
  • Nazwa getEarliestRunTimeMillis została zmieniona na getNextScheduleTimeMillis. (I2bd7a)
  • Informacje o następnym zaplanowanym czasie uruchomienia są dodawane do WorkInfo. (I797e4)
  • Informacje o początkowym opóźnieniu i częstotliwości są dodawane do WorkInfo. (I52f2f)
  • Dodano metodę observe workers via Flows via methods getWorkInfosByTagFlow, getWorkInfoByIdFlow, getWorkInfosForUniqueWorkFlow, getWorkInfosFlow (If122a)
  • Do konstruktorów i właściwości Constraints dodano brakujące adnotacje @RequiresApi(...). Zostały one dopasowane do odpowiednich adnotacji w metodach Constraints.Builder, które istniały już w wcześniejszych wersjach WorkManager. (I6d7d2)
  • WorkManager ma teraz osobny limit dla pracowników zajmujących się uri treści, aby zapewnić im gwarantowane sloty w JobScheduler i zapobiec braku aktualizacji treści w przypadku dużego obciążenia. Limit można skonfigurować za pomocą Configuration.Builder.setContentUriTriggerWorkersLimit. (Ic128f)
  • Do WorkInfo dodano ograniczenia. (I162c0)

Wersja 2.8

Wersja 2.8.1

22 marca 2023 r.

Element androidx.work:work-*:2.8.1 został zwolniony. Wersja 2.8.1 zawiera te commity.

Poprawki błędów

  • Naprawiono błąd w RescheduleReceiver, który powodował, że ANR nie obsługiwał prawidłowo 2 jednoczesnych transmisji. (b/236906724)

Wersja 2.8.0

8 lutego 2023 r.

Element androidx.work:work-*:2.8.0 został zwolniony. Wersja 2.8.0 zawiera te commity.

Ważne zmiany od wersji 2.7.0

Nowe funkcje

Zmiany w interfejsie API

  • Dodano WorkManager.updateWork, aby zaktualizować pracę, zachowując jej pierwotny czas kolejkowania i łańcuchowanie.(I9a248, b/219446409)
  • Dodano użytkownika ExistingPeriodicWorkPolicy.UPDATE Te zasady umożliwiają aktualizację okresowego dzieła pod kątem nazwy. Jest ona podobna do obecnej funkcji REPLACE, ale mniej inwazyjna: nie anuluje zadania, jeśli jest ono obecnie wykonywane, i zachowuje czas kolejkowania – początkowe opóźnienie i okres są obliczane na podstawie pierwotnego czasu kolejkowania, a nie czasu aktualizacji. Nazwa REPLACE została wycofana, aby zmniejszyć ryzyko pomylenia jej z nazwami REPLACEUPDATE, które są bardzo podobne. Jeśli nadal chcesz zachować poprzednią semantykę REPLACE, możesz użyć nowo dodanego elementu CANCEL_AND_REENQUEUE, który jest identyczny z elementem REPLACE. (I985ed, b/219446409)
  • Dodano możliwość przechwytywania wyjątków harmonogramu, podając Consumer<Throwable> za pomocą metody setSchedulingExceptionHandler.
  • Dodano możliwość przekazania wartości Consumer<Throwable> za pomocą metody setInitializationExceptionHandler, aby określić, czy podczas inicjowania WorkManagera wystąpiły problemy.
  • Pomoce w wersji inline dla funkcji OneTimeWorkRequestPeriodicWorkRequest zostały przeniesione z funkcji androidx.work:work-runtime-ktx do funkcji androidx.work:work-runtime (I0010f, b/209145335).
  • Dodano pomocnicze metody WorkQuery.fromIds, WorkQuery.fromStates, WorkQuery.fromUniqueWorkNames, WorkQuery.fromTags, aby umożliwić bezpośrednie tworzenie obiektów WorkQuery. (b/199919736) (If48f2, b/199919736)
  • Dodano getForegroundInfo do Worker. (Ic1ead)
  • RxWorker zarówno w przypadku RxJava 2, jak i RxJava 3 ma teraz metodę setForeground zwracającą Completable, którą można użyć zamiast metody setForegroundInfoAsync zwracającej ListenableFuture.
  • RxWorker zarówno w przypadku RxJava 2, jak i RxJava 3 ma metodę getForegroundInfo zwracającą Single, którą można użyć zamiast metody getForegroundInfoAsync zwracającej ListenableFuture. (b/203851459)
  • Ograniczenia można teraz tworzyć bezpośrednio zamiast używać funkcji Constraints.Builder, co jest wygodne dla użytkowników Kotlina. (Idc390, b/137568653)
  • Dodano możliwość sprawdzenia, czy WorkManager została zainicjalizowana. Dodaliśmy też nowy interfejs API getConfiguration() dla programistów bibliotek, aby mogli uzyskać konfigurację, z którą zainicjowano interfejs API WorkManager. (I6eff3, b/212300336)

Poprawki błędów

  • Rozwiązaliśmy problem z łatwym harmonogramem, który uniemożliwiał natychmiastowe uruchamianie podprocesów w przypadku obciążenia. (I9686b, b/248111307)
  • Dodaliśmy uprawnienie @RequiresPermission do interfejsów API, które wymagają przyznania uprawnienia POST_NOTIFICATIONS w pakiecie SDK 33 lub nowszym. (Ie542e, b/238790278)
  • Rozpowszechnianie anulowań w CoroutineScopeListenableFuture przy użyciu suspendCancellableCoroutine.

Wersja 2.8.0-rc01

7 grudnia 2022 r.

Element androidx.work:work-*:2.8.0-rc01 został zwolniony. Wersja 2.8.0-rc01 zawiera te commity.

Nowe funkcje

  • Brak nowych funkcji w tej wersji. Jest to głównie aktualizacja wersji

Wersja 2.8.0-beta02

9 listopada 2022 r.

Element androidx.work:work-*:2.8.0-beta02 został zwolniony. Wersja 2.8.0-beta02 zawiera te commity.

Poprawki błędów

  • Naprawiono metodę equals w funkcji WorkInfo, która wcześniej nie uwzględniała informacji o nowej generacji. (4977 cm³)

Wersja 2.8.0-beta01

5 października 2022 r.

Element androidx.work:work-*:2.8.0-beta01 został zwolniony. Wersja 2.8.0-beta01 zawiera te commity.

Poprawki błędów

  • Rozwiązaliśmy problem z łatwym harmonogramem, który uniemożliwiał natychmiastowe uruchamianie podprocesów w przypadku obciążenia. (I9686b, b/248111307)

Wersja 2.8.0-alpha04

7 września 2022 roku

Element androidx.work:work-*:2.8.0-alpha04 został zwolniony. Wersja 2.8.0-alpha04 zawiera te commity.

Zmiany w interfejsie API

  • Dodano kolumny WorkerInfo.getGeneration()WorkerParameters.getGeneration(), które zwracają generację pracownika. Pracownik ma wiele generacji, jeśli został zaktualizowany za pomocą funkcji WorkManager.updateWork lub WorkManager.enqueueUniquePeriodicWork za pomocą funkcji ExistingPeriodicWorkPolicy.UPDATE. Pamiętaj, że jeśli instancja robocza jest obecnie uruchomiona, ta metoda może zwrócić nowszą generację niż ta, która jest obecnie uruchomiona, jeśli podczas wykonywania instancji roboczej nastąpiła aktualizacja. (I665c5, b/219446409) (I128a9, b/219446409)
  • Dodano InitializationExceptionHandler, czyli sterownik wyjątków, który pozwala określić, czy podczas inicjowania WorkManager wystąpiły problemy. (I061de)

Wersja 2.8.0-alpha03

10 sierpnia 2022 r.

Element androidx.work:work-*:2.8.0-alpha03 został zwolniony. Wersja 2.8.0-alpha03 zawiera te commity.

Nowe funkcje

  • Dodano możliwość aktualizowania WorkRequests w nieinwazyjny sposób, zachowując pierwotny czas kolejkowania, łańcuchowanie itp. Więcej informacji znajdziesz w artykułach WorkManager.updateWorkExistingPeriodicWorkPolicy.UPDATE.

Zmiany w interfejsie API

  • Dodano WorkManager.updateWork, aby zaktualizować pracę, zachowując jej pierwotny czas kolejkowania i łańcuchowanie.(I9a248, b/219446409)
  • Dodano użytkownika ExistingPeriodicWorkPolicy.UPDATE Te zasady umożliwiają aktualizację okresowej pracy za pomocą nazwy. Jest ona podobna do obecnej funkcji REPLACE, ale mniej inwazyjna: nie anuluje zadania, jeśli jest ono obecnie wykonywane, i zachowuje czas kolejkowania – początkowe opóźnienie i okres są obliczane na podstawie pierwotnego czasu kolejkowania, a nie czasu aktualizacji. Usługa REPLACE została wycofana, aby zmniejszyć ryzyko pomylenia usługi REPLACE z usługą UPDATE, które mają bardzo podobne nazwy. Jeśli nadal chcesz zachować poprzednią semantykę REPLACE, możesz użyć nowo dodanego elementu CANCEL_AND_REENQUEUE, który jest identyczny z elementem REPLACE. (I985ed, b/219446409)
  • Dodaj możliwość przechwytywania wyjątków dotyczących harmonogramu przez zdefiniowanie SchedulingExceptionHandler. (I033eb)
  • Pomoce w wersji inline dla funkcji OneTimeWorkRequestPeriodicWorkRequest zostały przeniesione z funkcji androidx.work:work-runtime-ktx do funkcji androidx.work:work-runtime (I0010f, b/209145335).

Poprawki błędów

  • Dodano @RequiresPermission do interfejsów API, które wymagają przyznania uprawnienia POST_NOTIFICATIONS w pakiecie SDK w wersji 33 lub nowszej. (Ie542e, b/238790278)

Wersja 2.8.0-alpha02

6 kwietnia 2022 roku

Element androidx.work:work-*:2.8.0-alpha02 został zwolniony. Wersja 2.8.0-alpha02 zawiera te commity.

Zmiany w interfejsie API

  • Ograniczenia można teraz tworzyć bezpośrednio zamiast za pomocą klasy Builder, co jest wygodne dla użytkowników Kotlina. (Idc390, b/137568653)
  • Dodano możliwość sprawdzenia, czy WorkManager została zainicjalizowana. Dodaliśmy też nowy interfejs API getConfiguration() dla programistów bibliotek, aby mogli uzyskać konfigurację, z którą zainicjowano interfejs API WorkManager. (I6eff3, b/212300336)

Wersja 2.8.0-alpha01

12 stycznia 2022 r.

Element androidx.work:work-*:2.8.0-alpha01 został zwolniony. Wersja 2.8.0-alpha01 zawiera te commity.

Zmiany w interfejsie API

  • Dodano pomocnicze metody WorkQuery.fromStates, WorkQuery.fromUniqueWorkNames, WorkQuery.fromTags, które umożliwiają bezpośrednie tworzenie zapytania WorkQuery. (If48f2, b/199919736)
  • Dodaje eksperymentalne metody BuildCompat dla przyszłych pakietów SDK (Iafd82, b/207528937).
  • Dodano getForegroundInfo do Worker. (Ic1ead)
  • Dodano pomocnicze metody WorkQuery.fromIds do tworzenia zapytań roboczych bezpośrednio z identyfikatorów. (Ie5bdf, b/199919736)
  • Metoda RxWorker ma teraz funkcję setForeground, która zwraca wartość Completable. Można jej używać zamiast funkcji setForegroundInfoAsync, która zwraca wartość ListenableFuture. (I85156)
  • W RxWorker dla RxJava 2 jest teraz metoda getForegroundInfo z wartością zwracaną Single, którą można użyć zamiast metody getForegroundInfoAsync z wartością zwracaną ListenableFuture. (I21c91, b/203851459)
  • W wersji RxWorker dla RxJava 3 dodano metodę getForegroundInfo, która zwraca wartość Single. Można jej używać zamiast metody getForegroundInfoAsync, która zwraca wartość ListenableFuture. (I1ca8a)
  • Metoda RxWorker ma teraz funkcję setForeground, która zwraca wartość Completable. Można jej używać zamiast funkcji setForegroundInfoAsync, która zwraca wartość ListenableFuture. (I992a3, b/203851459)

Poprawki błędów

  • Rozpowszechnianie anulowań w CoroutineScopeListenableFuture przy użyciu suspendCancellableCoroutine. (I77e63)

Wersja 2.7

Wersja 2.7.1

17 listopada 2021 r.

Element androidx.work:work-*:2.7.1 został zwolniony. Wersja 2.7.1 zawiera te commity.

Poprawki błędów

  • Anulowania w CoroutineScope są propagowane do ListenableFuture, gdy używasz suspendCancellableCoroutine. (I77e63)
  • Wyjątek jest zgłaszany natychmiast, gdy opóźnione żądania pracy są oznaczone jako przyspieszone. bef1762

Wersja 2.7.0

13 października 2021 r.

Element androidx.work:work-*:2.7.0 został zwolniony. Wersja 2.7.0 zawiera te commity.

Ważne zmiany od wersji 2.6.0

  • WorkManager wprowadza nowy interfejs API WorkRequest.Builder.setExpedited(...), który ułatwia stosowanie ograniczeń usługi na pierwszym planie w Androidzie 12.

  • Gdy używasz setExpedited(...), WorkManager deleguje zadania przyspieszone w JobSchedulerze od Androida 12, zapewniając jednocześnie zgodność wsteczną w poprzednich wersjach Androida przez delegowanie do usługi na pierwszym planie.

Wersja 2.7.0-rc01

29 września 2021 r.

Element androidx.work:work-*:2.7.0-rc01 został zwolniony. Wersja 2.7.0-rc01 zawiera te zatwierdzenia.

Ta wersja jest identyczna z androidx.work:work-*:2.7.0-beta01.

Wersja 2.7.0-beta01

1 września 2021 roku

Element androidx.work:work-*:2.7.0-beta01 został zwolniony. Wersja 2.7.0-beta01 zawiera te commity.

Nowe funkcje

  • Zmniejsz współzawodnictwo SQLite w wielu procesach podczas inicjowania WorkManagera.

Zmiany w interfejsie API

  • Usuń interfejsy API @ExperimentalExpeditedWork, ponieważ interfejsy API platformy na Androida 12 (S) są stabilne. (aosp/1792806)

Poprawki błędów

  • Udostępnij lepszy komunikat o błędzie dla pracowników przyspieszonych, którzy nie implementują getForegroundInfoAsync(). (aosp/1809376)

Wersja 2.7.0-alpha05

21 lipca 2021 r.

Element androidx.work:work-*:2.7.0-alpha05 został zwolniony. Wersja 2.7.0-alpha05 zawiera te commity.

Ta wersja zawiera też poprawki błędów z wersji WorkManagera 2.6.0-beta02.

Wersja 2.7.0-alpha04

2 czerwca 2021 r.

Element androidx.work:work-*:2.7.0-alpha04 został zwolniony.

Ta wersja zawiera też zmiany z wersji 2.6.0-beta01.

Zmiany w interfejsie API

  • Właściwość ListenableWorker.setForegroundAsync() nie jest już wycofana.
  • W miarę możliwości zalecamy korzystanie z interfejsu WorkRequest.Builder.setExpedited(...) API. Aby lepiej obsługiwać sytuacje, w których aplikacja nie jest objęta ograniczeniami usługi na pierwszym planie, deweloperzy mogą korzystać z interfejsu API ListenableWorker.setForegroundAsync().
  • Jeśli wywołanie ListenableWorker.setForegroundAsync() nastąpi, gdy aplikacja podlega ograniczeniom usługi na pierwszym planie, zostanie rzucony wyjątek ForegroundServiceStartNotAllowedException.

Poprawki błędów

  • Gdy przyspieszone zadania zostaną ponownie zaplanowane, nie będą już przyspieszone. Stają się one zwykłymi zadaniami.

Wersja 2.7.0-alpha03

21 kwietnia 2021 r.

Element androidx.work:work-*:2.7.0-alpha03 został zwolniony. Wersja 2.7.0-alpha03 zawiera te commity.

Nowe funkcje

Zmiany w interfejsie API

Wersja 2.7.0-alpha02

10 marca 2021 r.

Element androidx.work:work-*:2.7.0-alpha02 został zwolniony. Wersja 2.7.0-alpha02 zawiera te commity.

Poprawki błędów

  • Ujawnienie zmienności PendingIntent, aby naprawić błąd powodujący awarię podczas kierowania na Androida 12. (b/180884673)

Wersja 2.7.0-alpha01

18 lutego 2021 r.

Element androidx.work:work-*:2.7.0-alpha01 został zwolniony. Wersja 2.7.0-alpha01 zawiera te commity.

Nowe funkcje

  • WorkManager wprowadza nowy interfejs API WorkRequest.Builder.setExpedited(...), który uwzględnia ograniczenia usług na pierwszym planie w Androidzie 12.

    Aplikacje nie mogą już uruchamiać usługi na pierwszym planie, gdy działają w tle. Aby lepiej obsługiwać długotrwałe zadania, które były wcześniej powiązane z cyklem życia usługi na pierwszym planie, aplikacje mogą oznaczać WorkRequest jako przyspieszone.

    Ten interfejs API zastępuje interfejsy API setForegroundAsync(...) / setForeground(...), które zostały wycofane.

    Gdy używasz setExpedited(...), WorkManager deleguje zadania przyspieszone do JobScheduler, począwszy od Androida 12, zapewniając jednocześnie zgodność wsteczną w poprzednich wersjach Androida przez delegowanie do usług na pierwszym planie.

Zmiany w interfejsie API

  • Dodano obsługę przyspieszonych WorkRequest.

Wersja 2.6.0

Wersja 2.6.0

1 września 2021 roku

Element androidx.work:work-*:2.6.0 został zwolniony. Wersja 2.6.0 zawiera te commity.

Ważne zmiany od wersji 2.5.0

  • WorkManager używa teraz funkcji androidx.startup do inicjowania WorkManagera. Jeśli do inicjowania WorkManagera w przeszłości używano tools:node="remove" ContentProvider, wykonaj te czynności.

    <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" />
    
  • Dodano obsługę instancji roboczych, które mogą działać w dowolnym procesie. (Iaf200)

  • Dodano klasę RemoteCoroutineWorker, która jest implementacją klasy RemoteListenableWorker i może się łączyć z procesem zdalnym. (I30578)

Wersja 2.6.0-rc01

4 sierpnia 2021 r.

Element androidx.work:work-*:2.6.0-rc01 został zwolniony. Wersja 2.6.0-rc01 zawiera te zatwierdzenia.

Ta wersja jest identyczna z androidx.work:work-*:2.6.0-beta02.

Wersja 2.6.0-beta02

21 lipca 2021 r.

Element androidx.work:work-*:2.6.0-beta02 został zwolniony. Wersja 2.6.0-beta02 zawiera te commity.

Poprawki błędów

  • RemoteWorkManager jest teraz prawidłowo odłączany od RemoteWorkManagerService, co pozwala RemoteWorkManagerService na prawidłowe oczyszczanie. aosp/1730694
  • RemoteListenableWorker jest teraz prawidłowo odłączany od RemoteWorkerService, co pozwala RemoteWorkerService prawidłowo oczyszczać. aosp/1743817
  • ForceStopRunnable działa teraz tylko w ramach głównego procesu aplikacji. Jest to optymalizacja, która zapobiega rywalizacji o zasoby w przypadku aplikacji korzystających z wielu procesów. aosp/1749180, aosp/1761729

Wersja 2.6.0-beta01

2 czerwca 2021 r.

Element androidx.work:work-*:2.6.0-beta01 został zwolniony. Wersja 2.6.0-beta01 zawiera te commity.

Ta wersja zawiera drobne ulepszenia dokumentacji. Ta wersja jest w dużej mierze identyczna z 2.6.0-alpha02.

Wersja 2.6.0-alpha02

21 kwietnia 2021 r.

Element androidx.work:work-*:2.6.0-alpha02 został zwolniony. Wersja 2.6.0-alpha02 zawiera te commity.

Nowe funkcje

  • Dodaje obsługę instancji roboczych, które mogą działać w dowolnym procesie. (Iaf200)

  • Dodano RemoteCoroutineWorker, czyli implementację RemoteListenableWorker, która może się łączyć z procesem zdalnym. (I30578)

Zmiany w interfejsie API

  • Dodaliśmy obsługę ograniczenia sieci TEMPORARILY_UNMETERED. (I08d5e)
  • Obsługa instancji roboczych w wielu procesach w przypadku setProgressAsync(). (Ib6d08)
  • Udostępnij WorkManagerInitializer, aby inne androidx.startup.Initializer mogły z nich korzystać jako zależności. (I5ab11)

Wersja 2.6.0-alpha01

24 marca 2021 r.

Element androidx.work:work-*:2.6.0-alpha01 został zwolniony. Wersja 2.6.0-alpha01 zawiera te commity.

Nowe funkcje

  • WorkManager używa teraz androidx.startup do inicjowania WorkManager. Wcześniej robiła to funkcja androidx.work.impl.WorkManagerInitializer. (aosp/1608813)

    Jeśli w przeszłości do inicjowania cyklu życia procesu używany był element tools:node="remove", a obecnie używasz elementu ContentProvider, wykonaj te czynności.

     <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>
    

    (lub)

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

Zmiany w interfejsie API

  • Dodaj interfejs API Result.getOutputData(), który zwraca outputData obiektu ListenableWorker. (Ie51e3)

Poprawki błędów

  • Dodaj obejście błędu OEM, który powoduje wyjątek SecurityException podczas korzystania z interfejsów API AlarmManager. (aosp/1587518)

Wersja 2.5.0

Wersja 2.5.0

27 stycznia 2021 r.

Element androidx.work:work-*:2.5.0 został zwolniony. Wersja 2.5.0 zawiera te zatwierdzenia.

Najważniejsze zmiany od wersji 2.4.0

  • Nowy artefakt :work:work-multiprocess dla aplikacji, które korzystają z wielu procesów. Dzięki temu zwiększysz wydajność, ponieważ zaplanowanie zadania będzie odbywać się w ramach jednego procesu.
  • Czasami ActivityManager nie może utworzyć instancji JobService, aby rozpocząć zadanie. Spowoduje to, że zadanie zostanie po cichu usunięte z powodu błędu platformy. WorkManager zapewnia teraz, że podczas inicjowania Application za pomocą zadań uzgadniających są tworzone zadania zapasowe dla każdego WorkRequest. Dzięki temu znacznie poprawia się niezawodność wykonywania zadań. (b/172475041, aosp/1489577)
  • WorkManager ogranicza wzrost bazy danych, skracając czas buforowania, w którym WorkRequest są śledzone po zakończeniu WorkRequest. Czas trwania wynosił 7 dni. Został on skrócony do 1 dni plus czas określony w parametrze keepResultsForAtLeast. (aosp/1419708)
  • Aby ułatwić testowanie, w bibliotece TestListenableWorkerBuilder dodano obsługę klasy kwalifikowanej, która rozszerza klasę ListenableWorker. (aosp/1443299, b/169787349)
  • Inspektor WorkManager jest teraz dostępny w Android Studio Arctic Fox.

Wersja 2.5.0-rc01

13 stycznia 2021 r.

Element androidx.work:work-*:2.5.0-rc01 został zwolniony. Wersja 2.5.0-rc01 zawiera te zatwierdzenia.

Poprawki błędów

  • Rozwiązaliśmy błąd polegający na tym, że po zaktualizowaniu elementów za pomocą interfejsu API opartego na interfejsie WorkQuery nieprawidłowa była wartość atrybutu getWorkInfosLiveData. (aosp/1540566, b/173769028)
  • Naprawiono błąd, który w niektórych rzadkich przypadkach powodował, że transakcje bazy danych nie były oznaczane jako udane. Może to powodować problemy na niektórych urządzeniach Motorola. (aosp/1535368, b/175944460)
  • Naprawiono błąd polegający na ignorowaniu NoSuchElementException podczas próby odłączenia od martwego procesu. (aosp/1530589)
  • Ulepsz ConstraintTrackingWorker, aby zatrzymywać ListenableWorker tylko wtedy, gdy nie został jeszcze zatrzymany. (aosp/1496844, b/172946965)
  • Zaktualizuj biblioteki androidx.work, aby były przeznaczone dla Java 8 (Ibd2f2).

Wersja 2.5.0-beta02

2 grudnia 2020 r.

Element androidx.work:work-*:2.5.0-beta02 został zwolniony. Wersja 2.5.0-beta02 zawiera te commity.

Poprawki błędów

  • Naprawiono błąd w androidx.work:work-multiprocess, w którym WorkManager przypadkowo blokował wątek wywołania podczas próby powiązania z wyznaczonym procesem. (aosp/1475538)
  • Naprawiliśmy błąd polegający na tym, że PeriodicWorkRequest nie były prawidłowo uzgadniane. (b/172475041, aosp/1489577)
  • Dodano obejście błędu platformy podczas zatrzymywania usługi na pierwszym planie podczas korzystania z interfejsów API setForeground*. (b/170924044, aosp/1489901)

Wersja 2.5.0-beta01

28 października 2020 r.

Element androidx.work:work-*:2.5.0-beta01 został zwolniony. Wersja 2.5.0-beta01 zawiera te commity.

Nowe funkcje

  • WorkManager automatycznie ogranicza liczbę WorkRequest, które mogą być pobierane przez algorytm szeregowania w ramach procesu. Prośby są nadal wykonywane w kolejności FIFO. (aosp/1455228)
  • WorkManager próbuje przywrócić dane, gdy baza danych aplikacji jest w złym stanie. (aosp/1463103)

Poprawki błędów

  • Gdy ListenableWorker zostaną przerwane, natychmiast oznacz je jako ENQUEUED, aby można je było ponownie zaplanować. (aosp/1455618, b/170273988)

Wersja 2.5.0-alpha03

14 października 2020 r.

Element androidx.work:work-*:2.5.0-alpha03 został zwolniony. Wersja 2.5.0-alpha03 zawiera te commity.

Zmiany w interfejsie API

  • W przypadku typów TestListenableWorkerBuilderTestWorkerBuilder nie używaj typów nieprzetworzonych. (I883ad, b/169787349)

Poprawki błędów

  • Aby określić nazwę domyślnego procesu aplikacji, użyj polecenia ApplicationInfo. (b/168716641, aosp/1429950)
  • Popraw reguły widoczności w przypadku RemoteWorkManagerRemoteWorkContinuation. Te interfejsy API nie są już oznaczone jako @Restricted. (aosp/1432091)
  • Napraw reguły Proguarda dotyczące :work:work-multiprocess. (aosp/1432091)
  • Poprawa cyklu życia powiadomień w przypadku długotrwałych procesów związanych z usługą na pierwszym planie. (b/168502234, aosp/1431331)

Wersja 2.5.0-alpha02

16 września 2020 roku

Element androidx.work:work-*:2.5.0-alpha02 został zwolniony. Wersja 2.5.0-alpha02 zawiera te commity.

Nowe funkcje

  • Dodaj interfejs API do WorkQuery, aby móc używać zapytań id do zapytań WorkInfo. (aosp/1412372, b/157335295)
  • WorkManager lepiej obsługuje aplikacje, które korzystają z wielu procesów, dzięki nowemu artefaktowi (androidx.work:work-multiprocess:*). Ten nowy artefakt pomaga rozwiązać kilka problemów, z którymi borykają się duże aplikacje, w tym:
    • WorkManager musi być zwykle inicjowany w ramach każdego procesu aplikacji. To nie jest dobre, ponieważ zwiększa to współzawodnictwo SQLite, co z kolei powoduje inne problemy. WorkManager ma teraz nowe interfejsy API, które można wykorzystać do określenia głównego procesu aplikacji za pomocą funkcji Configuration#setDefaultProcessName(processName). processName to pełna nazwa procesu, która wygląda jak packageName:processName (np. com.example:remote).
    • Zestaw nowych interfejsów API: RemoteWorkManager i RemoteWorkContinuation do enqueue, cancel i query. Te interfejsy API nie obejmują wariantów LiveData, aby uniknąć kolizji SQLite w wielu procesach. Wszystkie wywołania funkcji enqueue, cancelquery są przekierowywane do procesu aplikacji primary za pomocą AIDL i zwracają płynną ListenableFuture. (aosp/1392657, aosp/1411210, aosp/1412215, aosp/1417713)

Zmiany w interfejsie API

  • WorkManager usuwa teraz ukończone WorkRequest, które nie mają niepełnych zależności, bardziej agresywnie. Czas trwania bufora zmienił się z 7 dni na 1 dzień. (aosp/1419708)

Poprawki błędów

  • WorkManager automatycznie uzgadnia zadania, dzięki czemu zadania WorkRequestJobScheduler są zsynchronizowane po zainicjowaniu zadania WorkManager. (aosp/1412794, b/166292069)

Wersja 2.5.0-alpha01

19 sierpnia 2020 r.

Element androidx.work:work-*:2.5.0-alpha01 został zwolniony. Wersja 2.5.0-alpha01 zawiera te commity.

Nowe funkcje

  • zmiany wewnętrznych interfejsów API, które pozwolą nam w przyszłości udostępniać lepsze narzędzia do obsługi WorkManager; Bądź na bieżąco z dodatkowymi informacjami.

Poprawki błędów

  • Obsługa SecurityException podczas śledzenia stanu sieci na niektórych urządzeniach. (aosp/1396969)

Darowizna zewnętrzna

Wersja 2.4.0

Wersja 2.4.0

22 lipca 2020 r.

Element androidx.work:work-*:2.4.0 został zwolniony. Wersja 2.4.0 zawiera te zatwierdzenia.

Najważniejsze zmiany od wersji 2.3.0

  • Planista WorkManager jest teraz bardziej wydajny. Wcześniej w ramach tej opcji Scheduler brano pod uwagę tylko wykonywanie pracy, która nie została opóźniona i dla której spełniono ograniczenia. Obecnie planista w trakcie przetwarzania śledzi WorkRequest, które mogą zostać wykonane w przyszłości, w tym żądania pracy okresowej. Funkcja Scheduler w trakcie przetwarzania nie uwzględnia też limitów harmonogramowania (ale nadal jest ograniczona do rozmiaru Executor używanego przez WorkManager). Oznacza to, że aplikacja może teraz wykonywać znacznie więcej poleceń WorkRequest, gdy jest na pierwszym planie. Aby zarządzać wykonywaniem opóźnionych zadań na pierwszym planie, WorkManager wprowadza też nową konfigurowalną opcję RunnableScheduler. (aosp/1185778)
  • WorkManager obsługuje teraz RxJava 3. Aby używać RxJava 3, musisz uwzględnić tę zależność: implementation "androidx.work:work-rxjava3:2.4.0". (aosp/1277904)
  • Dodaliśmy możliwość wysyłania zapytań o WorkInfo za pomocą WorkQuery. Jest to przydatne, gdy deweloperzy chcą wysyłać zapytania dotyczące WorkInfo z użyciem kombinacji kilku atrybutów. Więcej informacji znajdziesz w artykułach WorkQuery.Builder.fromStates(...), WorkQuery.Builder. fromTags(...)WorkQuery.Builder.fromUniqueWorkNames(...). (aosp/1253230, b/143847546)
  • Dodaj możliwość żądania informacji diagnostycznych z WorkManager za pomocą:

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

    Zawiera on wiele przydatnych informacji, w tym:

    • WorkRequests, które zostały ukończone w ciągu ostatnich 24 godzin.
    • WorkRequests, które są obecnie uruchamiane.
    • Zaplanowane zadania. (aosp/1235501)
  • Dodaj ExistingWorkPolicy.APPEND_OR_REPLACE, który jest podobny do APPEND, ale zastępuje łańcuch, który anulował lub nie spełnił wymagań wstępnych. (b/134613984, aosp/1199640)

  • Dodano możliwość dodawania niestandardowego RunnableScheduler do śledzenia poleceń pracy, które należy wykonać w przyszłości. Jest on używany przez Schedulera w ramach procesu. (aosp/1203944)

  • Dodanie obsługi dynamicznego dodawania fabryk do delegowania, gdy używasz DelegatingWorkerFactory. (b/156289105, aosp/1309745)

  • Dopasuj śledzenie ograniczeń BATTERY_NOT_LOW do platformy. (aosp/1312583)

  • Do określania nazwy procesu harmonogram w ramach procesu korzysta teraz z lepszych interfejsów API. Jest to przydatne, aby lepiej obsługiwać aplikacje korzystające z wielu procesów. (aosp/1324732)

  • Nowe reguły Lint, które nakładają:

    • Korzystanie z właściwych foregroundServiceType podczas korzystania z interfejsów API setForegroundAsync(). (b/147873061, aosp/1215915)
    • Określanie identyfikatorów JobScheduler, których WorkManager powinien używać podczas bezpośredniego korzystania z interfejsów JobService. aosp/1223567
    • Dodano nową regułę lint, która zapewnia, że implementacje ListenableWorker są teraz public, gdy używasz domyślnej WorkerFactory. (aosp/1291262)
  • Wywołania do setForegroundAsync(), które nie zostaną zakończone przed zakończeniem ListenableWorker, będą teraz sygnalizowane za pomocą IllegalStateException w zwróconym ListenableFuture. (aosp/1262743)

  • Rozwiązanie problemu polegającego na tym, że ForegroundService nie jest zatrzymywany po przerwaniu działania Worker na pierwszym planie. (b/155579898, aosp/1302153)

  • Naprawiono błąd, który powodował, że WorkManager próbował wykonać wiele instancji Worker powiązanych z usługą na pierwszym planie (b/156310133, aosp/1309853).

Wersja 2.4.0-rc01

24 czerwca 2020 r.

Element androidx.work:work-*:2.4.0-rc01 został zwolniony. Wersja 2.4.0-rc01 zawiera te zatwierdzenia.

Poprawki błędów

  • Do określania nazwy procesu harmonogram w ramach procesu korzysta teraz z lepszych interfejsów API. Jest to przydatne, aby lepiej obsługiwać aplikacje korzystające z wielu procesów. (aosp/1324732)

Wersja 2.4.0-beta01

20 maja 2020 r.

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-beta01androidx.work:work-testing:2.4.0-beta01 są zwolnione. Wersja 2.4.0-beta01 zawiera te commity.

Poprawki błędów

  • Rozwiązanie problemu polegającego na tym, że ForegroundService nie jest zatrzymywany po przerwaniu działania Worker na pierwszym planie. (b/155579898, aosp/1302153)
  • Naprawiono błąd, który powodował, że WorkManager próbował wykonać wiele instancji Worker powiązanych z usługą na pierwszym planie (b/156310133, aosp/1309853).
  • Dodanie obsługi dynamicznego dodawania fabryk do delegowania, gdy używasz DelegatingWorkerFactory. (b/156289105, aosp/1309745)
  • Dopasuj śledzenie ograniczeń BATTERY_NOT_LOW do platformy. (aosp/1312583)

Wersja 2.4.0-alpha03

29 kwietnia 2020 r.

Element androidx.work:work-*:2.4.0-alpha03 został zwolniony. Wersja 2.4.0-alpha03 zawiera te commity.

Nowe funkcje

  • WorkManager obsługuje teraz RxJava 3. Aby używać RxJava 3, musisz uwzględnić tę zależność: implementation "androidx.work:work-rxjava3:2.4.0-alpha03". (aosp/1277904)
  • Dodano nową regułę lint, która zapewnia, że implementacje ListenableWorker są teraz public, gdy używasz domyślnej WorkerFactory. (aosp/1291262)

Zmiany w interfejsie API

  • Wywołanie funkcji setProgressAsync() po zakończeniu wykonywania funkcji ListenableWorker spowoduje teraz przekazanie sygnału Exception za pomocą funkcji ListenableFuture. (aosp/1285494)
  • Element WorkQuery.Builder jest teraz oznaczony jako final. (aosp/1275037)
  • WorkQuery.Builder metody fabryczne withStates, withTagswithUniqueWorkNames zostały odpowiednio przemianowane na fromStates, fromTagsfromUniqueWorkNames. (aosp/1280287)

Poprawki błędów

Wersja 2.4.0-alpha02

1 kwietnia 2020 r.

Element androidx.work:work-*:2.4.0-alpha02 został zwolniony. Wersja 2.4.0-alpha02 zawiera te komity.

Nowe funkcje

  • Dodano nową regułę Lint, która ostrzega, gdy WorkRequest wymaga zarówno Constraints.setRequiresCharging(...), jak i Constraints.setRequiresDeviceIdle(...). Niektóre urządzenia nigdy nie są ładowane i nie są nieaktywne w tym samym czasie. W związku z tym takie żądania będą się wykonywać rzadziej niż oczekiwano. (aosp/1253840)

Zmiany w interfejsie API

  • Dodaliśmy możliwość wysyłania zapytań o WorkInfo za pomocą WorkQuery. Jest to przydatne, gdy deweloperzy chcą wysyłać zapytania dotyczące WorkInfo z użyciem kombinacji kilku atrybutów. Więcej informacji znajdziesz w artykułach WorkQuery.Builder withStates(...), WorkQuery.Builder withTags(...)WorkQuery.Builder withUniqueWorkNames(...). (aosp/1253230, b/143847546)

  • Wywołania do setForegroundAsync(), które nie zostaną zakończone przed zakończeniem ListenableWorker, będą teraz sygnalizowane za pomocą IllegalStateException w zwróconym ListenableFuture. (aosp/1262743)

Poprawki błędów

  • Naprawiono regułę lint, która sprawdza nieprawidłowe długości interwałów dla PeriodicWorkRequest. (aosp/1254846, b/152606442)

Wersja 2.4.0-alpha01

4 marca 2020 r.

Element androidx.work:work-*:2.4.0-alpha01 został zwolniony. Wersja 2.4.0-alpha01 zawiera te commity.

Nowe funkcje

  • Planista WorkManager jest teraz bardziej wydajny. Wcześniej harmonogram w trakcie wykonywania brał pod uwagę tylko wykonywanie zadań, które nie były opóźnione i których ograniczenia zostały spełnione. Obecnie harmonogram sterujący w trakcie przetwarzania śledzi WorkRequest, które mogą zostać wykonane w przyszłości, w tym PeriodicWorkRequest. Scheduler w ramach procesu nie przestrzega limitów harmonogramowania (ale nadal jest ograniczony do rozmiaru Executor używanego przez WorkManager). Oznacza to, że aplikacja może teraz wykonywać znacznie więcej WorkRequest, gdy działa na pierwszym planie. (aosp/1185778)

  • Dodano możliwość żądania informacji diagnostycznych z WorkManagera za pomocą adb shell am broadcast -a "androidx.work.diagnostics.REQUEST_DIAGNOSTICS" -p "<your_app_package_name>". Zawiera on wiele przydatnych informacji, w tym:

    • WorkRequests, które zostały ukończone w ciągu ostatnich 24 godzin.
    • WorkRequests, które są obecnie uruchamiane.
    • Zaplanowane zadania. (aosp/1235501)
  • Nowe reguły Lint, które nakładają:

    • Korzystanie z właściwych foregroundServiceType podczas korzystania z interfejsów API setForegroundAsync(). (b/147873061, aosp/1215915)
    • Określanie identyfikatorów JobScheduler, których WorkManager powinien używać podczas bezpośredniego korzystania z interfejsów API JobService. (aosp/1223567)

Zmiany w interfejsie API

  • Dodaj ExistingWorkPolicy.APPEND_OR_REPLACE, która jest podobna do APPEND, ale zastępuje łańcuch, który anulował lub nie spełnił wymagań wstępnych. (b/134613984, aosp/1199640)

  • Umożliw dodanie niestandardowego RunnableScheduler do śledzenia WorkRequest, które muszą zostać wykonane w przyszłości. Jest on używany przez Schedulera w ramach procesu. (aosp/1203944)

Poprawki błędów

  • Funkcja setProgress() w funkcji RxWorker została wycofana, ponieważ wcześniej zwracała wartość Single<Void>, która jest nieprawidłowym typem. Dodaliśmy nowy interfejs API setCompletableProgress(), który zamiast Completable zwraca Completable. Dodaliśmy też nowe reguły Lint, które ułatwiają migrację na nowe interfejsy API. (b/150080946, aosp/1242665)

Wersja 2.3.4

Wersja 2.3.4

18 marca 2020 r.

Element androidx.work:work-*:2.3.4 został zwolniony. Wersja 2.3.4 zawiera te commity.

Poprawki błędów

  • Usunęliśmy błąd, który powodował uruchamianie wielu instancji długo działających Worker po przekroczeniu 10-minutowego okna wykonywania. (aosp/1247484, b/150553353)
  • Rozwiązanie problemu z lintem WorkManagera IssueRegistry. Dziękujemy @ZacSweers z Slacka za Twój wkład. (aosp/1217923)

Wersja 2.3.3

Wersja 2.3.3

4 marca 2020 r.

Element androidx.work:work-*:2.3.3 został zwolniony. Wersja 2.3.3 zawiera te commity.

Poprawki błędów

  • Naprawiliśmy błąd, który powodował, że jeśli Worker zostało przerwane, nie było ono ponownie planowane. (b/150325687, aosp/1246571)

Wersja 2.3.2

Wersja 2.3.2

19 lutego 2020 r.

androidx.work:work-*:2.3.2 zostały wydane. Wersja 2.3.2 zawiera te zatwierdzenia.

Poprawki błędów

  • Rozwiązano problem, który w rzadkich przypadkach powodował, że WorkManager przekraczał limit 100 zadań w JobSchedulerze. (aosp/1226859, b/149092520)
  • Poprawka dotycząca warunków wyścigu w ConstraintControllers. (aosp/1220100)
  • Ulepszony cykl zarządzania usługami na pierwszym planie w przypadku długotrwałych procesów. (aosp/1226295)
  • Ulepszono zarządzanie anulowaniem powiadomień w przypadku długotrwałych zadań wykonywanych przez pracowników. (aosp/1228346)

Wersja 2.3.1

Wersja 2.3.1

5 lutego 2020 r.

Element androidx.work:work-*:2.3.1 został zwolniony. Wersja 2.3.1 zawiera te zatwierdzenia:

Poprawki błędów

  • Lepsze zarządzanie cyklem życia Notification w przypadku długotrwałych procesów Worker, które działają, gdy aktywny jest proces Service na pierwszym planie. (aosp/1218539, b/147249312)
  • WorkManager zależy teraz od stabilnej wersji androidx.sqlite:sqlite-framework:2.1.0. (aosp/1217729)
  • Dodano reguły lint, aby zapewnić, że foregroundServiceType jest określony w AndroidManifest.xml, gdy używasz foregroundServiceTypeForegroundInfo. (aosp/1214207, b/147873061)

Wersja 2.3.0

Wersja 2.3.0

22 stycznia 2020 r.

androidx.work:work-*:2.3.0 jest publikowany bez zmian od 2.3.0-rc01. Wersja 2.3.0 zawiera te zatwierdzenia:

Ważne zmiany od wersji 2.2.0

  • Obsługa długich lub ważnych zadań za pomocą ListenableWorker#setForegroundAsync().
  • Obsługa postępu instancji roboczej za pomocą ListenableWorker#setProgressAsync().
  • WorkManager zawiera teraz dodatkowe reguły lint jako część biblioteki, co pomaga w wczesnej identyfikacji błędów.

Wersja 2.3.0-rc01

8 stycznia 2020 r.

Element androidx.work:work-*:2.3.0-rc01 został zwolniony. Wersja 2.3.0-rc01 zawiera te zatwierdzenia:

Ta wersja jest identyczna z 2.3.0-beta02.

Poprawki błędów

  • Element work-testing definiuje teraz zależność api od elementu work-runtime-ktx. (aosp/1194410)

Wersja 2.3.0-beta02

18 grudnia 2019 r.

Element androidx.work:work-*:2.3.0-beta02 został zwolniony. Wersja 2.3.0-beta02 zawiera te zatwierdzenia:

Nowe funkcje

  • Dodaliśmy lepszy komunikat o błędzie w przypadku nieodwracalnych wyjątków SQLite. (aosp/1185777)
  • Dodano regułę lint, która zapewnia, że dostawca treści androidx.work.impl.WorkManagerInitializer zostanie usunięty z AndroidManifest.xml podczas inicjalizacji na żądanie. (aosp/1167007)
  • Dodano ostrzeżenie o błędach, gdy enqueue() jest używane zamiast PeriodicWorkRequest zamiast enqueueUniquePeriodicWork(). (aosp/1166032)

Zmiany w interfejsie API

  • Funkcja ForegroundInfo wymaga teraz określenia notificationId, która ma być używana podczas korzystania z funkcji ListenableWorker.setForegroundAsync(). To jest zmiana powodująca niezgodność. Dzięki temu możesz równolegle uruchamiać wiele długotrwałych procesów.Worker WorkManager lepiej zarządza też czasem życia podanych Notification. (b/145473554, aosp/1181208, asop/1181216, asop/1183577)

Poprawki błędów

  • Naprawiliśmy błąd w implementacji AlarmManager, który powodował, że alarmy nie były prawidłowo usuwane. (aosp/1156444)
  • Rozwiązaliśmy błąd polegający na tym, że pusta lista WorkRequest powodowała tworzenie nieprawidłowego ciągu WorkContinuation. (b/142835274, aosp/1157051)

Zmiany w zależnościach

  • WorkManager używa teraz Room 2.2.2.

Wersja 2.3.0-beta01

20 listopada 2019 r.

Element androidx.work:work-*:2.3.0-beta01 został zwolniony. Wersja 2.3.0-beta01 zawiera te commity:

Nowe funkcje

  • Dodano nową regułę lint, która zapobiega błędom programisty spowodowanym nieprawidłową implementacją androidx.work.Configuration.Provider podczas inicjalizacji na żądanie. aosp/1164559

Wersja 2.3.0-alpha03

23 października 2019 r.

Element androidx.work:work-*:2.3.0-alpha03 został zwolniony. Wersja 2.3.0-alpha03 zawiera te commity

Nowe funkcje

  • Dodano interfejs API WorkManager.createCancelPendingIntent(), który ułatwia anulowanie WorkRequest bez konieczności rejestrowania kolejnego komponentu w AndroidManifest.xml. Ten interfejs API ułatwia anulowanie WorkRequest z poziomu Notification. Spodziewamy się, że będzie to połączone z nowymi interfejsami API na pierwszym planie w wersji 2.3.0.
  • WorkManager zależy teraz od wersji androidx.room:*:2.2.0 stabilnej.

Zmiany w interfejsie API

  • Zmieniliśmy nazwę interfejsu ForegroundInfo.getNotificationType() na ForegroundInfo.getForegroundServiceType(), aby zachować spójność z interfejsami API platformy. (b/142729893, aosp/1143316)

Poprawki błędów

  • Naprawiono błąd spowodowany niepotrzebnym wywołaniem funkcji setTransactionSuccessful() poza transakcją. Dzieje się tak w przypadku rzadkich migracji. (b/142580433, aosp/1141737)

Wersja 2.3.0-alpha02

9 października 2019 r.

Element androidx.work:work-*:2.3.0-alpha02 został zwolniony. Wersja 2.3.0-alpha02 zawiera te commity

Nowe funkcje

  • WorkManager obsługuje teraz długotrwałe lub ważne zadania, które powinny być utrzymywane przez system operacyjny. Więcej informacji znajdziesz w artykule ListenableWorker#setForegroundAsync() (lub CoroutineWorker#setForeground() w przypadku języka Kotlin). (aosp/1133636)

Zmiany w interfejsie API

  • Interfejs API containsKey w wersji Data został przemianowany na hasKeyWithValueOfType. Zmieniono też nazwę odpowiedniej metody rozszerzenia w bibliotece ktx. (b/141916545)

Poprawki błędów

  • WorkManager przydziela pracę w sposób sprawiedliwy, gdy liczba WorkRequest oczekujących w kole zadań zbliża się do limitów harmonogramowania. (aosp/1105766)
  • WorkManager wywołuje ListenableWorker#onStopped() tylko wtedy, gdy zadanie nie zostało jeszcze ukończone. (b/140055777)
  • WorkManager usuwa teraz informacje o postępach, gdy zadanie zostanie przerwane lub osiągnie stan końcowy. (aosp/1114572)
  • Data ma teraz znacznie bardziej przydatną reprezentację toString(). (b/140945323)
  • Data ma teraz lepszą metodę equals(). Obsługuje też typy deepEquals i Array. (b/140922528)
  • WorkManager przechowuje teraz swoją wewnętrzną bazę danych i pliki z ustawieniami w katalogu bez kopii zapasowej. (b/114808216)

Wersja 2.3.0-alpha01

22 sierpnia 2019 r.

Element androidx.work:work-*:2.3.September 5, 20190-alpha01 został zwolniony. Zmiany zawarte w tej wersji znajdziesz tutaj.

Nowe funkcje

  • ListenableWorker mogą teraz ustawiać postęp za pomocą interfejsu API setProgressAsync(). Dodano też odpowiadający interfejs API suspend w interfejsie setProgress w przeglądarce CoroutineWorker i interfejs API setProgress w przeglądarce RxWorker, który zwraca wartość Single<Void>. Dzięki tym nowym interfejsom API pracownicy mogą przekazywać informacje o postępach za pomocą interfejsu WorkInfo, który ma odpowiedni interfejs API getProgress. (b/79481554)
  • Data ma interfejs API containsKey(), który można wykorzystać do sprawdzenia, czy dane wejściowe do Worker mają klucze o oczekiwanym typie. (b/117136838)
  • Obiekt Data można teraz serializować za pomocą funkcji Data.toByteArray() i Data.fromByteArray(). Pamiętaj, że w przypadku Data nie ma gwarancji wersji, dlatego nie należy trwało przechowywać tego tokena ani używać go do komunikacji między aplikacjami. Można ich używać tylko w różnych procesach tej samej aplikacji.
  • Dodano możliwość określania InputMergerFactory za pomocą Configuration.setInputMergerFactory. (b/133273159)

Zmiany w interfejsie API

  • WorkManager zwróci wystąpienie IllegalStateException, jeśli WorkerFactory zwróci wystąpienie ListenableWorker, które zostało wcześniej wywołane. (b/139554406)
  • Aktualizacje dokumentacji dotyczące anulowania ListenableFuture i wywołania zwrotnego onStopped() w ListenableWorker. (b/138413671)

Poprawki błędów

  • Scheduler w trakcie przetwarzania ignoruje teraz WorkRequest z ograniczeniem idle. Te prośby są teraz odbierane przez JobScheduler tylko wtedy, gdy urządzenie jest rzeczywiście idle. (aosp/1089779)
  • TestScheduler używa teraz prawidłowo określonego interfejsu Executor dla wewnętrznego wykonawcy zadań w testach. (aosp/1090749)

Wersja 2.2.0

Wersja 2.2.0

15 sierpnia 2019 r.

Element androidx.work:work-*:2.2.0 został zwolniony. Zmiany zawarte w tej wersji znajdziesz tutaj.

Ta wersja jest identyczna z androidx.work:work-*:2.2.0-rc01.

Ważne zmiany w wersji 2.2.0 w porównaniu z 2.1.0

androidx.work:work-gcm:2.2.0 to nowy element Maven, który obsługuje używanie GCMNetworkManager jako harmonogramisty, gdy Usługi Google Play są dostępne na poziomie interfejsu API ≤ 22. Jest to opcjonalna zależność, która pomaga zapewnić bardziej niezawodne i wydajne przetwarzanie w tle w starszych wersjach interfejsu API. Jeśli Twoja aplikacja korzysta z Usług Google Play, dodaj tę zależność do pliku Gradle, aby automatycznie uzyskać obsługę GCMNetworkManager. Jeśli Usługi Play są niedostępne, WorkManager na starszych urządzeniach będzie nadal używać interfejsu AlarmManager.

Wersja 2.2.0-rc01

30 lipca 2019 r.

Element androidx.work:work-*:2.2.0-rc01 został zwolniony. Zmiany zawarte w tej wersji znajdziesz tutaj.

Poprawki błędów

  • Naprawiono błąd w implementacji AlarmManagera, który powodował przedwczesne wyłączenie usługi i w rzadkich przypadkach błąd RejectedExecutionException. (aosp/1092374) (b/138238197).
  • Dodaliśmy obejście problemu NullPointerException podczas korzystania z interfejsów API JobScheduler na niektórych urządzeniach. (aosp/1091020) (b/138364061), (b/138441699)

Wersja 2.2.0-beta02

19 lipca 2019 r.

Element androidx.work:work-*:2.2.0-beta02 został zwolniony. Zmiany zawarte w tej wersji znajdziesz tutaj.

Poprawki błędów

  • Usunięto niezamierzoną zależność od jacoco, która została wprowadzona w 2.2.0-beta01.

Wersja 2.2.0-beta01

17 lipca 2019 r.

Element androidx.work:work-*:2.2.0-beta01 został zwolniony. Zmiany zawarte w tej wersji znajdziesz tutaj.

Nowe funkcje

  • androidx.work:work-gcm:2.2.0-beta01 to nowy element Maven, który obsługuje używanie GCMNetworkManager jako harmonogramisty, gdy Usługi Google Play są dostępne na poziomie interfejsu API ≤ 22. Jest to opcjonalna zależność, która pomaga zapewnić bardziej niezawodne i wydajne przetwarzanie w tle w starszych wersjach interfejsu API. Jeśli Twoja aplikacja korzysta z Usług Google Play, dodaj tę zależność do pliku Gradle, aby automatycznie uzyskać obsługę GCMNetworkManager. Jeśli Usługi Play są niedostępne, WorkManager na starszych urządzeniach będzie nadal używać interfejsu AlarmManager.

Poprawki błędów

  • Naprawiono błąd IllegalArgumentException podczas śledzenia stanu sieci na tabletach Nvidia Shield K1. (aosp/1010188)

Wersja 2.1.0

Wersja 2.1.0

11 lipca 2019 r.

Element androidx.work:work-*:2.1.0 został zwolniony. Ta wersja jest identyczna z androidx.work:work-*:2.1.0-rc01.

Ważne zmiany od wersji 2.0.1

  • work-runtime-ktx wymaga teraz Javy 8. Jeśli napotkasz jakieś problemy, do build.gradle możesz dodać te informacje:kotlinOptions { jvmTarget = "1.8" }
  • Dodano inicjowanie WorkManagera na żądanie, które tworzy WorkManagera tylko wtedy, gdy jest używany. b/127497100 Aby skonfigurować projekt na potrzeby inicjalizacji na żądanie:
    1. Wyłącz automatyczny inicjalizator.
    2. Zaimplementuj Configuration.Provider w obiekcie niestandardowym Application.
    3. Zmień wszystkie odwołania do WorkManager.getInstance() na WorkManager.getInstance(Context). W ramach tej zmiany wycofujemy WorkManager.getInstance(). Zawsze bezpieczniej jest wywołać nową funkcję WorkManager.getInstance(Context), nawet jeśli nie wykonujesz inicjalizacji na żądanie.
  • PeriodicWorkRequest obsługują teraz początkowe opóźnienia. Aby ustawić początkowe opóźnienie, możesz użyć metody setInitialDelay w funkcji PeriodicWorkRequest.Builder. b/111404867
  • Dodano możliwość delegowania uprawnień do co najmniej 1 zarejestrowanego WorkerFactory za pomocą DelegatingWorkerFactory. b/131435993
  • Dodano możliwość dostosowywania Executor używanego przez WorkManager do wszystkich swoich wewnętrznych działań księgowych za pomocą Configuration.Builder.setTaskExecutor.
  • Dodano możliwość tworzenia testów jednostkowych klas Worker i ListenableWorker za pomocą artefaktu work-testing z elementami TestWorkerBuilder i TestListenableWorkerBuilder.
    • Pamiętaj, że work-testing pobiera teraz Kotlin jako zależność i domyślnie zawiera kilka rozszerzeń Kotlin.
  • Dodano liczbę prób uruchomienia do WorkInfo. b/127290461
  • Typy Data mogą teraz przechowywać i pobierać bajty oraz tablice bajtów. Nie zmienia to maksymalnego rozmiaru obiektów Data.
  • WorkManager zależy teraz od Room 2.1.0, co powinno rozwiązać niektóre problemy z bazą danych.

Wersja 2.1.0-rc01

27 czerwca 2019 r.

Element androidx.work:work-*:2.1.0-rc01 został zwolniony. Zmiany zawarte w tej wersji znajdziesz tutaj.

Poprawki błędów

  • Naprawiliśmy błąd, który powodował awarię aplikacji podczas wykonywania zadań z użyciem parametru JobScheduler, gdy w tym samym czasie trwało tworzenie kopii zapasowej b/135858602.

Wersja 2.1.0-beta02

20 czerwca 2019 r.

Element androidx.work:work-*:2.1.0-beta02 został zwolniony. Zmiany zawarte w tej wersji znajdziesz tutaj.

Poprawki błędów

  • TestListenableWorkerBuilder używa teraz prawidłowej wartości WorkerFactory podczas tworzenia instancji ListenableWorker. b/135275844
  • Naprawiono błąd, który powodował przesunięcia okien wykonania WorkRequest z powodu zakończenia działania procesu. b/135272196

Wersja 2.1.0-beta01

13 czerwca 2019 r.

Element androidx.work:work-*:2.1.0-beta01 został zwolniony. Zmiany zawarte w tej wersji znajdziesz tutaj.

Poprawki błędów

  • WorkManager zależy teraz od Room 2.1.0, co powinno rozwiązać niektóre problemy z bazą danych.
  • Usunięto niektóre operacje wejścia/wyjścia na dysku podczas uruchamiania w wątku głównym.
  • Rozwiązano potencjalny impas w śledzeniu ograniczeń. b/134361006
  • Anulowanie nieprawidłowych zadań przypisanych do WorkManagera. b/134058261
  • Dodano kilka wywołań interfejsów JobScheduler API w celu ochrony przed nieprawidłowym działaniem urządzeń.

Wersja 2.1.0-alpha03

5 czerwca 2019 r.

Element androidx.work:*:2.1.0-alpha03 został zwolniony.

Poprawki błędów

  • Ulepszona dokumentacja PeriodicWorkRequest.
  • WorkManagerTestInitHelper używa teraz odpowiedniego wykonawcy w tle do testów.
  • Rozwiązania problemów z SQLite podczas obsługi dużych transakcji na niektórych urządzeniach. (b/130182503)
  • Zależności WorkManagera są teraz bardziej szczegółowe. (b/133169148).
  • obejście błędów związanych z implementacją JobScheduler w przypadku OEM-ów podczas planowania zadań za pomocą WorkManagera.
  • Ulepszenia w harmonogramie opartym na interfejsie AlarmManager dotyczące czasu działania usług, które wcześniej powodowały rzadkie awarie. (b/133313734)

Wersja 2.1.0-alpha02

16 maja 2019 r.

Opublikowano WorkManager 2.1.0-alpha02. Ta wersja zawiera kilka nowych interfejsów API.

Zmiany w interfejsie API

  • PeriodicWorkRequest obsługują teraz początkowe opóźnienia. Aby ustawić początkowe opóźnienie, możesz użyć metody setInitialDelay w funkcji PeriodicWorkRequest.Builder. b/111404867

  • Dodano możliwość delegowania uprawnień do co najmniej 1 zarejestrowanego WorkerFactory za pomocą DelegatingWorkerFactory. b/131435993

  • Dodano możliwość dostosowywania Executor używanego przez WorkManager do wszystkich swoich wewnętrznych działań księgowych za pomocą Configuration.Builder.setTaskExecutor.

  • Ulepszona dokumentacja dotycząca funkcji WorkRequest.keepResultsForAtLeast (b/130638001), inicjalizacji na żądanie i funkcji PeriodicWorkRequest.Builder (b/131711394).

Wersja 2.1.0-alpha01

24 kwietnia 2019 r.

Opublikowano WorkManager 2.1.0-alpha01. Ta wersja zawiera kilka nowych interfejsów API. Pamiętaj, że od tej wersji wprowadzimy nowe funkcje, które nie będą dostępne w wersji 1.x. Zalecamy przejście na wersję 2.x.

Zmiany w interfejsie API

  • Dodano inicjowanie WorkManagera na żądanie, które tworzy WorkManagera tylko wtedy, gdy jest używany. b/127497100 Aby skonfigurować projekt na potrzeby inicjalizacji na żądanie:
    1. Wyłącz automatyczny inicjalizator.
    2. Zaimplementuj Configuration.Provider w obiekcie niestandardowym Application.
    3. Zmień wszystkie odwołania do WorkManager.getInstance() na WorkManager.getInstance(Context). W ramach tej zmiany wycofujemy WorkManager.getInstance(). Zawsze bezpieczniej jest wywołać nową funkcję WorkManager.getInstance(Context), nawet jeśli nie wykonujesz inicjalizacji na żądanie.
  • Dodano możliwość tworzenia testów jednostkowych klas Worker i ListenableWorker za pomocą artefaktu work-testing z elementami TestWorkerBuilder i TestListenableWorkerBuilder.
    • Pamiętaj, że work-testing pobiera teraz Kotlin jako zależność, ale domyślnie zawiera też kilka rozszerzeń Kotlin.
  • Dodano liczbę prób uruchomienia do WorkInfo. b/127290461
  • Typy Data mogą teraz przechowywać i pobierać bajty oraz tablice bajtów. Nie zmienia to maksymalnego rozmiaru obiektów Data.
  • Wycofano: CoroutineWorker.coroutineContext. To pole zostało błędnie zapisane jako CoroutineDispatcher. Nie powinno być już potrzebne, ponieważ w ciele funkcji zawieszającej możesz samodzielnie przejść do żądanego coroutineContext.
  • RxWorker.createWork()RxWorker.getBackgroundScheduler() są teraz oznaczone zwracanymi typami @NonNull.

Wersja 2.0.1

Wersja 2.0.1

9 kwietnia 2019 r.

Opublikowano WorkManager 2.0.1. Ta wersja jest identyczna z 2.0.1-rc01.

Wersja 2.0.1-rc01

3 kwietnia 2019 r.

Opublikowano WorkManager 2.0.1-rc01. Ta wersja zawiera poprawki błędów. W przypadku użytkowników starszej wersji 1.x niektóre z tych zmian są również dostępne w wersji 1.0.1-rc01.

Poprawki błędów

  • Testy Robolectric działają teraz prawidłowo z WorkManagerem. b/122553577
  • Naprawiono błąd awaryjny w przypadku rzadkich sytuacji, gdy ograniczenia nie były usuwane w interfejsach API z użyciem JobScheduler. b/129226383
  • Naprawiono błąd StackOverflowError dotyczący długich łańcuchów zadań. b/129091233
  • Zaktualizowano dokumentację dotyczącą PeriodicWorkRequest, aby wskazać, że czas elastyczny nie jest obsługiwany w interfejsie API 23.
  • Naprawiono niedziałające linki w dokumentacji Kotlina.

Wersja 2.0.0

Wersja 2.0.0

20 marca 2019 r.

Opublikowano WorkManager 2.0.0. Ta wersja jest identyczna z 2.0.0-rc01 i jest stabilną wersją AndroidX 1.0.0 z zależnościami AndroidX. Zalecamy kierowanie na tę wersję zamiast na starsze wersje 1.x. Wszystkie aktywne prace rozwojowe będą dotyczyć wersji 2.x, a wersja 1.x przez ograniczony czas będzie otrzymywać tylko poprawki krytycznych błędów.

Wersja 2.0.0-rc01

7 marca 2019 r.

Opublikowano WorkManager 2.0.0-rc01. Ta wersja jest identyczna z 1.0.0, ale zawiera zależności AndroidX. Gdy wersja 2.0.0 stanie się stabilna, uwzględnij ją, a starsze wersje 1.x będą otrzymywać tylko niektóre poprawki krytycznych błędów. Wszystkie aktywne prace programistyczne będą dotyczyć wersji 2.x.

Zależności sprzed AndroidX

Informacje o korzystaniu z rozszerzeń Kotlina znajdziesz w dokumentacji KTX.
Dokumenty referencyjne: Java
GroovyKotlin
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"
}
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")
}

Wersja 1.0.1

Wersja 1.0.1

9 kwietnia 2019 r.

Opublikowaliśmy WorkManager 1.0.1. Ta wersja jest identyczna z 1.0.1-rc01.

Zdecydowanie zachęcamy użytkowników do przejścia na wersję WorkManager 2.x, ponieważ w przyszłości będzie bardzo niewiele aktualizacji gałęzi 1.x. Nowe interfejsy API nie będą też dostępne w bibliotece 1.x.

Wersja 1.0.1-rc01

2 kwietnia 2019 r.

Opublikowano WorkManager 1.0.1-rc01. Ta wersja zawiera poprawki błędów.

Poprawki błędów

  • Testy Robolectric działają teraz prawidłowo z WorkManagerem. b/122553577
  • Naprawiono błąd awaryjny w przypadku rzadkich sytuacji, gdy ograniczenia nie były usuwane w interfejsach API z użyciem JobScheduler. b/129226383
  • Naprawiono błąd StackOverflowError dotyczący długich łańcuchów zadań. b/129091233

Wersja 1.0.0

Wersja 1.0.0

5 marca 2019 r.

Jest to stabilna wersja WorkManager 1.0.0. Ta wersja WorkManager jest identyczna z 1.0.0-rc02.

Wersja 1.0.0-rc02

21 lutego 2019 r.

To druga wersja kandydata do publikacji stabilnej wersji 1.0.0 WorkManagera. Ta wersja zawiera 2 poprawki błędów.

Poprawki błędów

  • Workers są teraz prawidłowo zaplanowane po awarii aplikacji. b/124546316

  • Workers, które rzucają niezaznaczone Exception, są teraz prawidłowo oznaczone jako FAILED i nie powodują już awarii procesu aplikacji.

Wersja 1.0.0-rc01

14 lutego 2019 r.

Jest to wersja kandydująca do publikacji stabilnej wersji 1.0.0 WorkManagera. Ta wersja zawiera 1 poprawkę błędu.

Poprawki błędów

  • Implementacja oparta na AlarmManager poprawnie uwzględnia okna flex w przypadku PeriodicWorkRequests. b/124274584

Wersja 1.0.0-beta05

6 lutego 2019 r.

Ta wersja zawiera kilka poprawek błędów.

Poprawki błędów

  • Rozwiązano problem, który występował, gdy w interfejsie API 23 używano funkcji JobScheduler.getPendingJob(...). b/123893059
  • Usunięto błąd NullPointerException na urządzeniach z Androidem 5.1 (poziom interfejsu API 22) lub starszym. b/123835104

Wersja 1.0.0-beta04

4 lutego 2019 r.

Ta wersja zawiera kilka poprawek błędów.

Poprawki błędów

  • Ulepszono harmonogramowanie okresowych zadań dla implementacji opartej na AlarmManager.
  • Rozwiązaliśmy problem polegający na tym, że WorkManager nieprawidłowo śledził ograniczenia podczas korzystania z implementacji opartej na AlarmManager. b/123379508
  • Rozwiązano problem polegający na tym, że przy użyciu implementacji opartej na AlarmManagerze nie powiodło się ponowne uruchomienie pracy po zabiciu procesu przez WorkManagera. b/123329850
  • Rozwiązaliśmy problem, który powodował wyciek Wakelocków przez WorkManagera podczas korzystania z implementacji opartej na AlarmManagerze.

Wersja 1.0.0-beta03

25 stycznia 2019 r.

Ta wersja zawiera kilka poprawek błędów.

Poprawki błędów

  • Wprowadziliśmy regresję 1.0.0-beta02, która w niektórych sytuacjach powodowała nieprawidłowe wykonywanie pracy. b/123211993
  • Rozwiązanie problemu polegającego na tym, że zadanie nie respektowało prawidłowo czasu odroczenia. b/122881597
  • Naprawiono błąd ConcurrentModificationException na urządzeniach z Androidem w wersji 5.1 (interfejs API 20) lub starszej. Jest to kontynuacja poprawki z 1.0.0-beta02. b/121345393
  • Dodaliśmy exported=false do niektórych komponentów w pliku manifestu, które nie miały tej adnotacji.
  • Dodanie do dokumentacji na poziomie pakietu informacji o tym, jak WorkManager współdziała z systemem operacyjnym.

Wersja 1.0.0-beta02

15 stycznia 2019 r.

Ta wersja zawiera kilka poprawek błędów.

Poprawki błędów

  • Rozwiązano problem, w którym zadania okresowe mogły być wykonywane więcej niż raz w interwale na urządzeniach z Androidem 6.0 (poziom interfejsu API 23).b/121998363
  • Naprawiono błąd ConcurrentModificationException na urządzeniach z Androidem 5.1 (poziom interfejsu API 22) lub starszym. b/121345393
  • Rozwiązano problem z błędnym wykonywaniem pracy, gdy nie są spełnione ograniczenia na urządzeniach z Androidem 5.1 (poziom interfejsu API 22) lub starszym. b/122578012
  • Zoptymalizowano obsługę ukończenia pracy, aby była szybsza w niektórych przypadkach szczególnych.b/122358129
  • Dodano zmianę, która rozwiązuje potencjalne problemy z konkurencją między wieloma instancjami LiveData używanymi przez WorkManager.
  • Zamiast 1.1.1-rc01 używamy teraz zależności Room 1.1.1, ponieważ obie wersje są identyczne. b/122578011

Wersja 1.0.0-beta01

19 grudnia 2018 r.

Ta wersja nie zawiera żadnych zmian interfejsu API. W przyszłości interfejs API WorkManager powinien pozostać stabilny do czasu wydania kolejnej wersji, chyba że wystąpi jakiś krytyczny problem. Ta wersja zawiera kilka poprawek błędów.

Poprawki błędów

  • Wcześniej anulowane zadania podrzędne do zakończonego zadania nadrzędnego nie będą już wykonywane. b/120811767
  • prawidłowo zainicjowane klasy rejestrowania (głównie w ramach testów);

Wersja 1.0.0-alpha13

12 grudnia 2018 r.

Ta wersja zawiera niewielką zmianę interfejsu API, która będzie przydatna dla niektórych użytkowników Kotlina.

Zmiany w interfejsie API

  • Klasa androidx.work.Result została przeniesiona i jest teraz klasą wewnętrzną klasy ListenableWorker. Zapobiega to konfliktom refaktoryzacji z klasą Result najwyższego poziomu w Kotlinie. To jest zmiana API, która powoduje przerwanie działania. b/120564418

Zmiany w interfejsie API, które powodują przerwanie zgodności

  • Klasa androidx.work.Result została przeniesiona i jest teraz klasą wewnętrzną klasy ListenableWorker.

Wersja 1.0.0-alpha12

5 grudnia 2018 r.

Ta wersja zawiera zmiany w interfejsie API, które mogą powodować niezgodność. Zapoznaj się z sekcją Zmiany w interfejsie API, które powodują niezgodność. Ta wersja prawdopodobnie zostanie wydana jako pierwsza wersja beta. alpha12 zawiera też obszerne aktualizacje dokumentacji.

Zmiany w interfejsie API

  • Nowy artefakt work-rxjava2 wprowadza RxWorker. To jest ListenableWorker, który oczekuje Single<Payload>.
  • Obsługa Firebase JobDispatcher została usunięta z powodu zbliżającego się wycofania tej funkcji. Oznacza to, że artefakt work-firebase nie będzie już aktualizowany, ponieważ przechodzimy do wersji beta. W przyszłości rozważymy dodanie alternatywy.
  • Scalono PayloadResult. Result to teraz „klasa zamknięta” z 3 konkretnymi implementacjami, które możesz uzyskać za pomocą Result.success() (lub Result.success(Data)), Result.failure() (lub Result.failure(Data)) i Result.retry(). Twoje ListenableFuture to teraz Result zamiast Payload. Worker nie mają metod getter i setter dla danych wyjściowych Data. To jest zmiana powodująca niezgodność.
  • Dodano Constraints.Builder.setTriggerContentMaxDelay(long, TimeUnit) i Constraints.Builder.setTriggerContentUpdateDelay(long, TimeUnit) oraz ich warianty, aby lepiej obsługiwać URI treści z długim czasem aktywacji. b/119919774
  • Dodano wariant WorkRequest.Builder.setBackoffCriteria(BackoffPolicy, Duration). Ta metoda wymaga interfejsu API 26.
  • Dodano metody rozszerzeń Kotlina Operation.await()ListenableFuture.await().
  • Nazwa Operation.getException() została zmieniona na Operation.getThrowable(). To jest zmiana powodująca niezgodność.
  • Klasa ContentUriTriggers i metody, które się do niej odwołują, nie są już dostępne publicznie. To jest zmiana powodująca niezgodność.
  • Aby uprościć interfejs API, usunięto pozostałe metody varargs w metodach WorkManager, WorkContinuationOneTimeWorkRequest. Aby rozwiązać problemy ze składaniem, możesz owinąć istniejące argumenty zmienne za pomocą funkcji Arrays.asList(...). Nadal uwzględniamy wersje każdej metody z jednym argumentem. To jest zmiana powodująca niezgodność.
  • Usunięto warianty WorkContinuation.combine(OneTimeWorkRequest, *). Prezentowany interfejs API był trudny do zrozumienia. Istniejące metody combine są bardziej zrozumiałe. To jest zmiana powodująca niezgodność.

Poprawki błędów

  • Implementacje sprzed Marshmallow są teraz bardziej niezawodne w przywracaniu procesu po awarii już wykonywanego zadania.
  • LiveData obserwowany za pomocą observeForever jest śledzony za pomocą WorkManager. Jest to wersja wsteczna poprawki biblioteki Room. b/74477406
  • Funkcja Data.Builder.build() wyrzuca teraz wyjątek, jeśli serializowany obiekt przekracza maksymalny rozmiar. Wcześniej zdarzało się to tylko w wątku w tle, gdzie nie można było tego odpowiednio obsłużyć.
  • Dalsze rozróżnianie zadań zatrzymanych i anulowanych; getWorkInfoById() zwraca WorkInfoCANCELLED State podczas ListenableWorker.onStopped().
  • Traktuj null Result jako błędy w ListenableWorker. b/120362353
  • Przypuszczalna poprawka dla Shield Tablets z interfejsem API 24, która czasami powodowała błąd IllegalArgumentException. b/119484416

Zmiany w interfejsie API, które powodują przerwanie zgodności

  • Obsługa interfejsu Firebase JobDispatcher została usunięta z powodu zbliżającego się wycofania. Oznacza to, że artefakt work-firebase nie będzie już aktualizowany, ponieważ przechodzimy do wersji beta. W przyszłości rozważymy dodanie alternatywy.
  • Scalono PayloadResult. Result to teraz „klasa zamknięta” z 3 konkretnymi implementacjami, które możesz uzyskać za pomocą Result.success() (lub Result.success(Data)), Result.failure() (lub Result.failure(Data)) i Result.retry(). Twoje ListenableFuture to teraz Result zamiast Payload. Worker nie mają metod getter i setter dla danych wyjściowych Data.
  • Dodano metody rozszerzeń Kotlina Operation.await()ListenableFuture.await().
  • Nazwa Operation.getException() została zmieniona na Operation.getThrowable().
  • Klasa ContentUriTriggers i metody, które się do niej odwołują, nie są już dostępne publicznie.
  • Aby uprościć interfejs API, usunięto pozostałe metody varargs w metodach WorkManager, WorkContinuationOneTimeWorkRequest. Aby rozwiązać problemy ze składaniem, możesz owinąć istniejące argumenty zmienne za pomocą funkcji Arrays.asList(...). Nadal uwzględniamy wersje każdej metody z jednym argumentem.
  • Usunięto warianty WorkContinuation.combine(OneTimeWorkRequest, *). Prezentowany interfejs API był trudny do zrozumienia. Istniejące metody combine są bardziej zrozumiałe.

Wersja 1.0.0-alpha11

8 listopada 2018 r.

Ta wersja zawiera wiele zmian, które staną się stabilnym interfejsem API w wersji beta. W tej wersji wprowadzono zmiany w interfejsie API, które powodują niezgodność. Zapoznaj się z sekcją Zmiany w interfejsie API powodujące niezgodność.

Zmiany w interfejsie API

  • work-runtime-ktx wprowadza nową funkcję CoroutineWorker.
  • Nazwa WorkStatus została zmieniona na WorkInfo. Wszystkie odpowiadające im warianty metody getStatus zostały przemianowane na odpowiadające im warianty getWorkInfo. To jest zmiana powodująca niezgodność.
  • ListenableWorker.onStopped() no longer accepts ma argument typu logicznego, który wskazuje, czy WorkRequest zostało anulowane. Usługa WorkManager nie rozróżnia już tych dwóch typów. To jest zmiana powodująca niezgodność.
  • Pakiet androidx.work.test został przemianowany na pakiet androidx.work.testing. To jest zmiana powodująca niezgodność.
  • Metody ustawiające w interfejsie Constraints nie są już częścią publicznego interfejsu API. To jest zmiana powodująca niezgodność.
  • tablice WorkerParameters.getTriggeredContentUris()WorkerParameters.getTriggeredContentAuthorities() zwracane wcześniej. Teraz te metody zwracają kolekcje. To jest zmiana powodująca niezgodność.
  • Nazwa ListenableWorker.onStartWork() została zmieniona na ListenableWorker.startWork(). To jest zmiana powodująca niezgodność.
  • Konstruktor WorkStatus nie jest już częścią publicznego interfejsu API. To jest zmiana powodująca niezgodność.
  • Jednostki organizacyjne Configuration.getMaxJobSchedulerID() i Configuration.getMinJobSchedulerID() zostały odpowiednio przemianowane na Configuration.getMinJobSchedulerId() i Configuration.getMaxJobSchedulerId(). To jest zmiana powodująca niezgodność.
  • Dodano wiele adnotacji @NonNull do publicznego interfejsu API, aby poprawić jego ergonomię.
  • Dodaj interfejs API WorkManager.enqueueUniqueWork(), aby kolejkować unikalne OneTimeWorkRequest bez konieczności tworzenia WorkContinuation.
  • Wszystkie warianty metod enqueuecancel w przypadku typu WorkManager zwracają teraz nowy typ Operation. To jest zmiana powodująca niezgodność.
  • Wszystkie warianty funkcji enqueue nie obsługują już argumentów zmiennych w przypadku funkcji WorkRequest. To jest zmiana powodująca niezgodność. Zamiast tego użyj kolekcji. Możesz użyć Arrays.asList(), aby zmodyfikować istniejący kod. Zrobiliśmy to, aby zmniejszyć liczbę interfejsów API i metod.
  • Próba initialize WorkManager więcej niż raz na proces spowoduje błąd IllegalStateException. To jest zmiana powodująca niezgodność.

Poprawki błędów

  • Elementy WorkRequest.Builder w artefakcie work-runtime-ktx korzystają teraz z elementów ListenableWorker. Poprawki b/117666259
  • Upewnij się, że następny czas uruchomienia reguły PeriodicWork jest w przyszłości. Poprawki b/118204399
  • Usuń potencjalne operacje wejścia/wyjścia na dysk podczas uruchamiania aplikacji za pomocą WorkManagera. Poprawki b/117796731
  • Napraw błędny stan wyścigu w pliku WorkConstraintsTracker. Rozwiązano problem android-workmanager/issues/56

Zmiany w interfejsie API, które powodują przerwanie zgodności

  • Nazwa WorkStatus została zmieniona na WorkInfo. Wszystkie odpowiadające im warianty metody getStatus zostały przemianowane na odpowiadające im warianty getWorkInfo.
  • ListenableWorker.onStopped() no longer accepts ma argument typu logicznego, który wskazuje, czy WorkRequest zostało anulowane. Usługa WorkManager nie rozróżnia już tych dwóch typów.
  • Pakiet androidx.work.test został przemianowany na pakiet androidx.work.testing.
  • Metody ustawiające w interfejsie Constraints nie są już częścią publicznego interfejsu API.
  • tablice WorkerParameters.getTriggeredContentUris()WorkerParameters.getTriggeredContentAuthorities() zwracane wcześniej. Teraz te metody zwracają kolekcje.
  • Nazwa ListenableWorker.onStartWork() została zmieniona na ListenableWorker.startWork().
  • Konstruktor WorkStatus nie jest już częścią publicznego interfejsu API.
  • Jednostki organizacyjne Configuration.getMaxJobSchedulerID() i Configuration.getMinJobSchedulerID() zostały odpowiednio przemianowane na Configuration.getMinJobSchedulerId() i Configuration.getMaxJobSchedulerId().
  • Wszystkie warianty metod enqueuecancel w funkcji WorkManager zwracają teraz nowy typ Operation.
  • Wszystkie warianty funkcji enqueue nie obsługują już argumentów zmiennych w przypadku funkcji WorkRequest.
  • Próba initialize WorkManager więcej niż raz na proces spowoduje błąd IllegalStateException.

Wersja 1.0.0-alpha10

11 października 2018 r.

Ta wersja obsługuje pracę asynchroniczną kontrolowaną przez dewelopera. W tej wersji wprowadzono zmiany w interfejsie API, które powodują niezgodność. Zapoznaj się z sekcją Zmiany w interfejsie API powodujące niezgodność.

Oczekujemy, że WorkManager wkracza w ostatnie fazy okresu alfa. Spodziewamy się, że interfejs API będzie stabilny w wersji beta, więc poświęć chwilę na przesłanie opinii w naszym narzędziu do śledzenia problemów.

Zmiany w interfejsie API

  • Usunięto wszystkie wcześniejsze metody i klasy deprecated, w tym domyślny konstruktor Worker. Ta zmiana w interfejsie API powoduje przerwanie działania.
  • Zmieniliśmy nazwę klasy NonBlockingWorker na ListenableWorker. Jest ona teraz widoczna i gotowa do użycia.
    • ListenableWorker zapewnia dostęp do jednej abstrakcyjnej metody ListenableFuture<Payload> onStartWork(), która jest wywoływana w wątku głównym. Rozpoczynanie i przetwarzanie pracy w tle zależy od Ciebie. Po zakończeniu należy odpowiednio zaktualizować ListenableFuture. Referencyjne implementacje ListenableFuture są dostępne w pakiecie Futures w gałęzi alpha02 (patrz sekcja WorkManager).
    • Worker rozszerza klasę ListenableWorker i nadal działa tak samo, z abstrakcyjną metodą Result doWork().
    • Zmieniono kolejność niektórych metod i użytkowników z grupy Worker na grupę ListenableWorker.
    • Wkrótce udostępnimy implementacje referencyjne ListenableWorker, które korzystają z korobocznych funkcji w Kotlinie (po wydaniu stabilnych wersji) i z RxJava2.
  • Interfejs WorkerFactory i konkretna implementacja DefaultWorkerFactory zostały scalone w abstrakcyjną klasę o nazwie WorkerFactory. Dzięki temu domyślne działanie oparte na odbiciu jest wywoływane jako ostateczne rozwiązanie w przypadku wszystkich instancji WorkerFactory utworzonych przez użytkownika. To jest zmiana powodująca niezgodność.
  • Usunięto metody WorkManager.synchronous()WorkContinuation.synchronous() oraz wszystkie powiązane z nimi metody. Dodano typ zwracany ListenableFuture<Void> dla wielu metod w interfejsie API. Ta zmiana w interfejsie API powoduje przerwanie działania.
    • Teraz możesz synchronicznie pobierać i obserwować dane za pomocą funkcji ListenableFuture. Na przykład funkcja WorkManager.enqueue() zwracała wcześniej void, a teraz zwraca ListenableFuture<Void>. Po zakończeniu operacji możesz wywołać funkcję ListenableFuture.addListener(Runnable, Executor) lub ListenableFuture.get(), aby uruchomić kod.
    • Pamiętaj, że te ListenableFuture nie informują, czy operacja zakończyła się sukcesem, czy niepowodzeniem, tylko że została zakończona. Aby uzyskać te informacje, nadal musisz połączyć metody WorkManagera.
    • Ignorujemy wywołania cancel() dotyczące tych obiektów, ponieważ są one mylące i trudne do zrozumienia (czy anulujesz operację, czy wywołanie pracy?). To jest zgodne z umową Future.
    • Aby zachować zgodność z synchronicznymi metodami getStatus*, udostępniliśmy warianty ListenableFuture i zmieniliśmy nazwy istniejących metod, które zwracały LiveData, tak aby zawierały w swojej nazwie „LiveData” (np. getStatusesByIdLiveData(UUID)). To zmiana interfejsu API, która powoduje przerwanie działania.

Poprawki błędów

  • Rozwiązaliśmy znany problem z wersji alpha09 dotyczący duplikatów plików androidx-annotations.pro. Możesz usunąć obejście z poprzednich informacji o wersji, usuwając exclude 'META-INF/proguard/androidx-annotations.pro' z pliku gradle.
  • Dodano konfiguracje Proguard, aby zachować nową instrukcję konstruktora Worker. b/116296569
  • Naprawiono potencjalny błąd NullPointerException w warunku wyścigu, w którym praca została REPLACE. b/116253486b/116677275
  • Funkcja WorkContinuation.combine() akceptuje teraz co najmniej 1 WorkContinuation zamiast 2 lub więcej. b/117266752

Zmiany w interfejsie API, które powodują przerwanie zgodności

  • Usunięto wszystkie wcześniejsze metody i klasy deprecated, w tym domyślny konstruktor Worker.
  • Interfejs WorkerFactory i konkretna implementacja DefaultWorkerFactory zostały scalone w abstrakcyjną klasę o nazwie WorkerFactory.
  • Usunięto WorkManager.synchronous()WorkContinuation.synchronous().
  • Metody WorkManager.getStatus*() zwracają teraz ListenableFuture. WorkManager.getStatus*LiveData() zwrotów LiveData.

Wersja 1.0.0-alpha09

19 września 2018 r.

Znany problem

Jeśli napotkasz ten problem: „Znaleziono więcej niż 1 plik z ścieżką niezależną od systemu operacyjnego 'META-INF/proguard/androidx-annotations.pro'”, dodaj do pliku gradle następujący kod jako tymczasowe rozwiązanie, dopóki nie naprawimy problemu w wersji alpha10:

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

Poprawki błędów

  • Dodano kolejną poprawkę, która była potrzebna do rozwiązania problemu „100 zadań”. b/115560696
  • Dodaliśmy kilka poprawek błędów ograniczeń klucza obcego spowodowanych warunkami wyścigu. b/114705286
  • Przekazane połączenia ConstraintTrackingWorker.onStopped(boolean) do podstawowego Worker. b/114125093
  • Wymuś prawidłowe minimalne opóźnienie w przypadku Firebase JobDispatcher. b/113304626
  • Ulepszone wątkowanie zapewnia wewnętrzne gwarancje biblioteki.
  • Poprawiono potencjalny problem z usuwaniem duplikatów LiveData wewnętrznie.

Zmiany w interfejsie API

  • Teraz możesz tworzyć własne instancje Worker w czasie wykonywania, podając wartość WorkerFactory jako część WorkManager.Configuration. Fabryka awaryjnego tworzenia obiektów to DefaultWorkerFactory, która odpowiada działaniu poprzednich wersji WorkManagera.
    • Domyślne konstruktory WorkerNonBlockingWorker są teraz oznaczone jako wycofane. Użyj nowego konstruktora (Worker(Context, WorkerParameters)) i wywołaj metodę super(Context, WorkerParameters). W przyszłych wersjach WorkManager konstruktor domyślny zostanie usunięty.
  • Wewnętrznie zaczęliśmy używać nowego artefaktu ListenableFuture (bez zależności od Guavy). W kolejnych wersjach wprowadzimy do interfejsu API interfejs ListenableFuture. Ta zmiana umożliwi odsłonięcie NonBlockingWorker.
  • Dodano możliwość uruchamiania pracy z limitem czasu w TestDriver za pomocą funkcji TestDriver.setInitialDelayMet(UUID) i TestDriver.setPeriodDelayMet(UUID). b/113360060

Zmiany powodujące niezgodność

  • Domyślne konstruktory WorkerNonBlockingWorker są przestarzałe. Jak najszybciej przejdź na nowego konstruktora. W przyszłych wersjach konstruktor domyślny zostanie usunięty.

Wersja 1.0.0-alpha08

27 sierpnia 2018 r.

Poprawki błędów

  • wyraźnie oznaczyć komponenty WorkManager jako nieobsługujące bezpośredniego uruchamiania, aby nie uruchamiały się podczas bezpośredniego uruchamiania; W przyszłości udostępnimy wersję WorkManagera, która obsługuje bezpośrednie uruchamianie. b/112665532
  • Rozwiązaliśmy problem, który powodował, że nie wykonywano powtórzonych zadań. b/112604021
  • Rozwiązanie problemu polegającego na tym, że zadania okresowe nie były wykonywane wielokrotnie (związany z powyższym problemem). b/112859683
  • Zasady wycofywania stosowane, gdy proces aplikacji jest już uruchomiony.
  • Poprawiono komunikaty o wyjątkach w Data, aby wskazywały one, że limit to 10 KB.
  • Zmniejszono maksymalną wartość Configuration.setMaxSchedulerLimit(int) do 50, aby uwzględnić pewien czas oczekiwania na zakończenie przetwarzania JobScheduler. b/112817355

Wersja 1.0.0-alpha07

16 sierpnia 2018 r.

Poprawki błędów

  • Naprawiono potencjalne zapytanie SQL z ujemnymi limitami, które mogło zwracać nieograniczoną liczbę wyników.
  • Zadania, które zostały zakończone, teraz prawidłowo anulują wszystkie oczekujące kopie tego zadania w innych harmonogramach. Spowoduje to przekroczenie limitu JobScheduler zadań. b/111569265
  • Naprawiono błąd ConcurrentModificationException w pliku ConstraintTracker. b/112272753
  • Zmieniono adnotacje typu zwracanego w funkcjach Data.getBooleanArray(String)Data.getIntArray(String) na @Nullable zamiast @NonNull. b/112275229

Zmiany w interfejsie API

  • Worker obejmuje teraz nowe zajęcia, NonBlockingWorker. Nie ma to wpływu na bieżące korzystanie z usługi. W przyszłości NonBlockingWorker stanie się w pełni obsługiwanym elementem w przypadku niestandardowych rozwiązań dotyczących wątków.
  • Zmieniono adnotacje typu zwracanego w funkcjach Data.getBooleanArray(String)Data.getIntArray(String) na @Nullable zamiast @NonNull. b/112275229
  • Rozszerzenia Kotlina: wycofane Map.toWorkData() i dodano interfejs workDataOf(vararg Pair<String, Any?>) najwyższego poziomu, aby zachować spójność z dotychczasowymi interfejsami API.

Wersja 1.0.0-alpha06

1 sierpnia 2018 r.

Poprawki błędów

  • Zapobieganie blokowaniu bazy danych podczas planowania pracy. b/111801342
  • Naprawiono błąd, który powodował, że PeriodicWork nie działał zgodnie z harmonogramem w trybie Doze. b/111469837
  • Naprawiono warunek wyścigu podczas śledzenia ograniczeń, który powodował awarię WorkManager. googlecodelabs/android-workmanager/issues/56
  • Utwórz unikalne WorkRequest, gdy używasz WorkRequest.Builder#build(). b/111408337
  • Włącz korzystanie z funkcji RescheduleReceiver tylko wtedy, gdy są WorkRequest, które jej potrzebują. b/111765853

Wersja 1.0.0-alpha05

24 lipca 2018 r.

Zmiany w interfejsie API

  • Urządzenie WorkManager.getInstance() jest teraz oznaczone jako @NonNull zamiast @Nullable. Jeśli jednak w przypadku inicjalizacji ręcznej singleton nie zostanie prawidłowo zainicjowany, metoda zwróci błąd IllegalStateException. Jest to zmiana interfejsu API, która może spowodować przerwanie działania aplikacji.
  • Dodaliśmy nowy interfejs API Configuration.Builder.setMinimumLoggingLevel(int), który umożliwia kontrolowanie szczegółowości WorkManagera. Domyślnie WorkManager rejestruje Log.INFO i nowsze.
  • Zmieniono sygnaturę parametru Data.getString(), aby nie przyjmował już wartości domyślnej (jest on domyślnie ustawiony na null). Jest to zmiana interfejsu API, która powoduje przerwanie działania.
  • Oznaczyliśmy niektóre metody potrzebne tylko do użytku wewnętrznego jako @hide. Obejmuje to konstruktor Constraints, Data.toByteArray()Data.fromByteArray(byte[]). Ta zmiana w interfejsie API powoduje przerwanie działania.

Poprawki błędów

  • WorkManager nie wykonuje już zadań w znanych przypadkach automatycznego tworzenia kopii zapasowych. Może to spowodować awarię. b/110564377
  • Rozwiązaliśmy problem z podwójnym planowaniem PeriodicWorkRequest podczas używania JobScheduler. b/110798652
  • Rozwiązaliśmy problem polegający na tym, że PeriodicWorkRequest nie działały prawidłowo po przejściu urządzenia w tryb uśpienia. b/111469837
  • Rozwiązaliśmy problem z opóźnieniami początkowymi podczas używania Firebase JobDispatcher. b/111141023
  • Naprawiono niektóre potencjalne problemy z warunkami wyścigu i czasami.
  • Prawidłowo zwolniono BroadcastReceiver, które nie były już potrzebne.
  • Zoptymalizowano wydajność przy ponownym planowaniu, gdy aplikacje są uruchamiane ponownie po wymuszeniu ich zamknięcia.
  • Funkcja TestScheduler.setAllConstraintsMet(UUID) może być wywoływana przed lub po umieszczeniu danego elementu WorkRequest w kolejce. b/111238024

Zmiany powodujące niezgodność

  • Urządzenie WorkManager.getInstance() jest teraz oznaczone jako @NonNull zamiast @Nullable.
  • Zmieniono sygnaturę funkcji Data.getString(), aby nie przyjmowała już wartości domyślnej (jest to domyślnie null).
  • Oznaczyliśmy niektóre metody potrzebne tylko do użytku wewnętrznego jako @hide. Obejmuje to konstruktor Constraints, Data.toByteArray()Data.fromByteArray(byte[]).

Wersja 1.0.0-alpha04

26 czerwca 2018 r.

Poprawki błędów

  • W przypadku korzystania z implementacji opartej na AlarmManager PeriodicWorkRequest są teraz poprawnie przeplanowywane.
  • Rozwiązano potencjalny problem z ANR podczas ponownego planowania wszystkich instancji roboczych po wymuszonym zatrzymaniu lub ponownym uruchomieniu. b/110507716
  • Dodano adnotacje dotyczące możliwości zwracania wartości null do różnych interfejsów WorkManager. b/110344065
  • Logowanie niewykrytych wyjątków, które występują podczas wykonywania zadania. b/109900862
  • Umożliwiono destruktywne migracje bazy danych na wypadek, gdybyś zdecydował(-a) się cofnąć do starszej wersji WorkManagera. b/74633270
  • Rozwiązaliśmy problem z błędem migracji, który występował podczas tworzenia zduplikowanych tagów domyślnych. Jest to bardzo rzadki problem, który występuje tylko wtedy, gdy użyjesz tego samego formatu tagu domyślnego.

Wersja 1.0.0-alpha03

19 czerwca 2018 r.

Poprawki błędów

  • Usunięto warunek wyścigu w implementacji opartej na AlarmManager (b/80346526).

  • Rozwiązaliśmy problem z duplikatami zadań podczas używania funkcji JobScheduler po ponownym uruchomieniu urządzenia.

  • Zadania z wyzwalaczami identyfikatora URI treści są teraz zachowywane po ponownym uruchomieniu. b/80234744

  • Aktualizacje dokumentacji. b/109827628, b/109758949, b/80230748

  • Naprawiliśmy awarię podczas ponownego umieszczania w kolejce WorkRequest. b/109572353.

  • Rozwiązano problem z ostrzeżeniami kompilatora Kotlina podczas używania zależności work-runtime-ktx.

  • WorkManager używa teraz wersji Room 1.1.1-rc1.

Zmiany w interfejsie API

  • Dodano getStatusesSync(), czyli wersję synchroniczną WorkContinuation.getStatuses().
  • Worker może rozróżnić anulowanie przez użytkownika i tymczasowe zatrzymanie na żądanie systemu operacyjnego. Worker.isStopped() zwraca true, jeśli został przesłany dowolny rodzaj zapytania o zatrzymanie. Worker.isCancelled() zwraca true, gdy zadanie zostało wyraźnie anulowane. b/79632247
  • Dodano obsługę metody JobParameters#getNetwork() w wersji interfejsu API 28. Jest ona dostępna za pomocą Worker.getNetwork().
  • Dodano Configuration.Builder.setMaxSchedulerLimit(int maxSchedulerLimit), aby można było określić maksymalną liczbę zadań, które mogą być wysyłane do JobScheduler lub AlarmManager. Dzięki temu WorkManager nie zajmie wszystkich dostępnych JobScheduler miejsc.
  • Dodano Configuration.setJobSchedulerJobIdRange(int minJobSchedulerId, int maxJobSchedulerId), który pomaga zdefiniować zakres identyfikatorów zadań JobScheduler, które mogą być bezpiecznie używane przez WorkManager. b/79996760
  • Worker.getRunAttemptCount() zwraca bieżącą liczbę uruchomień danego elementu Worker. b/79716516
  • WorkManager.enqueueUniquePeriodicWork(String uniqueWorkName, ExistingPeriodicWorkPolicy existingPeriodicWorkPolicy, PeriodicWorkRequest periodicWork) umożliwia umieszczanie w kolejce unikalnych PeriodicWorkRequest. b/79600647
  • WorkManager.cancelAllWork() anuluje wszystkie Worker. Biblioteki zależne od WorkManager mogą sprawdzać, kiedy ta metoda została wywołana po raz ostatni, używając WorkManager.getLastCancelAllTimeMillis() do dodatkowego czyszczenia stanu wewnętrznego.
  • Dodano WorkManager.pruneWork(), aby usuwać ukończone zadania z wewnętrznej bazy danych. b/79950952, b/109710758

Zmiany w zachowaniu

  • Dodano domyślny tag dla wszystkich elementów WorkRequest, który jest pełną nazwą klasy dla elementu Worker. Umożliwia to usuwanie WorkRequest bez tag lub gdy id jest niedostępny. b/109572351

Zmiany powodujące niezgodność

  • Nazwa Worker.WorkerResult została zmieniona na Worker.Result.
  • Worker.onStopped ma teraz dodatkowy parametr isCancelled, który jest ustawiony na true, gdy Worker został wyraźnie anulowany.

Wersja 1.0.0-alpha02

24 maja 2018 r.

Poprawki błędów

  • Naprawiono błąd NullPointerException w witrynie State.isFinished(). b/79550068
  • Rozwiązaliśmy problem, który powodował przeplanowanie Worker na Application.onCreate(). b/79660657
  • Rozwiązaliśmy problem, który umożliwiał zaplanowanie większej ilości pracy niż dozwolone przez system operacyjny. b/79497378
  • Przeniesienie czyszczenia blokad uśpienia powiązanych z Worker na wątek w tle.
  • Wdrożenie AlarmManager teraz prawidłowo usuwa dane, gdy wszystkie oczekujące zadania zostaną ukończone.
  • Naprawiono zapytania SQL do czyszczenia, które wpływały na wersje językowe inne niż angielska. b/80065360
  • Dodaliśmy obsługę właściwości float w składniku Data. b/79443878
  • Funkcja Data.Builder.putAll() zwraca teraz wystąpienie elementu Builder. b/79699162
  • Więcej informacji w dokumentacji i poprawki. b/79691663

Zmiany w interfejsie API

  • Workers może zareagować na zatrzymanie. Za pomocą funkcji Worker.isStopped() możesz sprawdzić, czy aplikacja Worker została zatrzymana. Worker.onStopped() można używać do wykonywania prostych operacji czyszczenia.
  • Interfejs API Worker.getTags() zwraca Set tagów powiązanych z Worker.
  • Dodano przeciążenia javax.time.Duration dla interfejsów API, które przyjmują kombinację czasu trwania i TimeUnit. Jest on chroniony przez @RequiresApi(26).
  • Rozszerzenia WorkManager zostały przeniesione z pakietu androidx.work.ktx do pakietu androidx.work. Stare rozszerzenia zostały wycofane i w przyszłej wersji zostaną usunięte.
  • Środowisko wykonawcze Configuration.withExecutor() zostało wycofane. Zamiast tego użyj Configuration.setExecutor().

Wersja 1.0.0-alpha01

8 maja 2018 r.

WorkManager upraszcza planowanie i wykonywanie gwarantowanego działania w tle z uwzględnieniem ograniczeń. Ta pierwsza wersja to 1.0.0-alpha01.