Menedżer pracy

Interfejs WorkManager API ułatwia planowanie odroczonych, asynchronicznych zadań, które muszą być uruchamiane niezawodnie. Dzięki nim możesz tworzyć zadania i przekazywać je do WorkManagera, aby uruchamiały się po spełnieniu wymagań związanych z pracą.
Najnowsza aktualizacja Wersja stabilna Kandydat do publikacji Wersja Beta Wersja alfa
17 kwietnia 2024 r. 2.9.0 - - 2.10.0-alfa02

Deklarowanie zależności

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

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

Odlotowy

dependencies {
    def work_version = "2.9.0"

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

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

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

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

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

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

Kotlin

dependencies {
    val work_version = "2.9.0"

    // (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ń Kotlin 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ć Jetpack. Daj nam znać, jeśli znajdziesz nowe wydania lub masz pomysły na ulepszenie tej biblioteki. Zanim utworzysz nową bibliotekę, przejrzyj problemy z tą biblioteką. Możesz oddać głos w ramach istniejącego problemu, klikając przycisk gwiazdki.

Utwórz nowy numer

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

Wersja 2.10

Wersja 2.10.0-alfa02

17 kwietnia 2024 r.

Aplikacja androidx.work:work-*:2.10.0-alpha02 została zwolniona. Wersja 2.10.0-alpha02 zawiera te zatwierdzenia.

Zmiany w interfejsie API

  • Dodano możliwość wysyłania spanów logów czasu za pomocą konfigurowalnego @RestrictTo Tracer w WorkManager. (I17d7f, b/260214125)
  • Dodano: Configuration.workerCoroutineContext, aby kontrolować dyspozytora, gdzie jest wykonywany CoroutineWorker. Warto całkowicie unikać używania Dispatchers.Default w WorkManager. (Icd1b7).
  • Dodawanie niestandardowych modułów obsługi wyjątków dla instancji roboczych (Ib1b74, b/261190695)
  • OneTimeWorkRequest.Builder i PeriodicWorkRequest.Builder można teraz konstruować przy użyciu KClass zamiast Class: val request = OneTimeWorkRequest.Builder(Worker::class).setConstraints(...).build() (Ib55f6)
  • WorkManager zajęcia zostały przeniesione do Kotlin. Teraz metody, które zwracają LiveData, ListenableFuture lub Flow, dostarczają poprawne informacje dotyczące wartości null. Może wymagać zmian w kodzie źródłowym klienta, jeśli założenia dotyczące wartości null w tym kodzie były nieprawidłowe. (If6757)

Wersja 2.10.0-alfa01

24 stycznia 2024 r.

Aplikacja androidx.work:work-*:2.10.0-alpha01 została zwolniona. Wersja 2.10.0-alpha01 zawiera te zatwierdzenia.

Nowe funkcje

  • Deweloperzy mogą określić NetworkRequest jako ograniczenie dla instancji roboczej za pomocą metody Constraints.setRequiredNetworkRequest. Umożliwia to dokładniejszą kontrolę nad siecią, w której ma działać ten instancja robocza.

Zmiany w interfejsie API

Wersja 2.9

Wersja 2.9.0

29 listopada 2023 r.

Aplikacja androidx.work:work-*:2.9.0 została zwolniona. Wersja 2.9.0 zawiera te zatwierdzenia.

Ważne zmiany od wersji 2.8.0

  • Dostrzegalność przez Flow s Zamiast LiveData postęp instancji roboczej można teraz obserwować za pomocą procesu za pomocą metody WorkManager.getWorkInfosFlow i podobnych metod.
  • Teraz WorkManager udostępnia wskazówkę, dlaczego instancja robocza została wcześniej zatrzymana. Zapytanie o nią można wysłać do instancji roboczej getStopReason() lub z WorkInfo za pomocą getStopReason().
  • Precyzyjne ustalanie harmonogramu okresowych pracowników przy użyciu: setNextScheduleTimeOverride. Umożliwia to dynamiczne obliczanie następnego harmonogramu okresowego pracy, które można wykorzystać do wdrożenia zaawansowanych funkcji, takich jak adaptacyjne czasy odświeżania, niestandardowe zachowanie ponawiania prób lub uruchamianie zasobu roboczego kanału informacyjnego przed każdym rankiem pobudki. Z tymi technikami należy używać funkcji ExistingPeriodicWorkPolicy.UPDATE, aby uniknąć anulowania obecnie uruchomionej instancji roboczej podczas planowania kolejnej.
  • Testy w usłudze WorkManager z dopasowywaniem wątków w środowisku produkcyjnym. Funkcji ExecutorsMode.PRESERVE_EXECUTORS można użyć w usłudze initializeTestWorkManager, aby zachować wykonawców ustawionych w Configuration i używać rzeczywistego wątku głównego.
  • Interfejsy API koroutin, takie jak CoroutineWorker, zostały przeniesione z dodatkowego środowiska wykonawczego artefaktu do środowiska wykonawczego głównego artefaktu. work-runtime-ktx jest teraz puste.

Zmiany w interfejsie API

  • Element stopReason został dodany do tablicy WorkInfo. Udostępnia stopReason po uruchomieniu instancji roboczej. Może przydać się podczas raportowania stopReason w użyteczny sposób, ponieważ po zatrzymaniu pracownika aplikacja sama może zostać bardzo szybko zamknięta. (I21386)
  • Zezwalaj na ustawianie parametru Clock za pomocą konfiguracji i używanie go do sekwencjonowania wykonywania testów instancji roboczych. (IC586e)
  • Do ListenableWorker dodano metodę getStopReason(), która wskazuje, dlaczego instancja robocza została zatrzymana. (I07060)
  • Dodano element WorkManagerTestInitHelper#closeWorkDatabase(), aby uniknąć ostrzeżenia Closeguard o wycieku zasobów. (Ia8d49)
  • Konstruktor WorkInfo jest teraz publiczny, co może być przydatne podczas testowania. (Ia00b6, b/209145335)
  • work-runtime-ktx jest teraz pusty, CoroutineWorker i inne narzędzia specyficzne dla Kotlin są teraz dostępne w głównym artefakcie środowiska wykonawczego. (I71a9a)
  • Dodano metodę setNextScheduleTimeOverride, która umożliwia dokładne ustawianie okresowych harmonogramów pracy (I3b4da).
  • Dodano getNextScheduleTimeMillis, aby uzyskać informacje o zaplanowanym czasie uruchomienia, dodano do folderu WorkInfo. (I797e4)
  • Początkowe opóźnienie i okresowość są dodawane do zakresu WorkInfo. (I52f2f)
  • Dodano metodę obserwacji instancji roboczych za pomocą przepływów za pomocą metod getWorkInfosByTagFlow, getWorkInfoByIdFlow, getWorkInfosForUniqueWorkFlow, getWorkInfosFlow (If122a)
  • Dodano brakujące adnotacje @RequiresApi(...) do konstruktorów i właściwości Constraints. Są teraz dostosowane do odpowiednich adnotacji w elementach ustawiających w projekcie Constraints.Builder, które istniały we wczesnych wersjach interfejsu WorkManager. (I6d7d2)
  • W WorkManager obowiązuje teraz oddzielny limit dla instancji roboczych identyfikatora treści, co daje im gwarantowane przedziały w JobScheduler, co pozwala zapobiegać pomijaniu treści podczas dużego obciążenia. Limit można skonfigurować na stronie Configuration.Builder.setContentUriTriggerWorkersLimit. (Ic128f)
  • Ograniczenia zostały dodane do zakresu WorkInfo. (I162c0)

Wersja 2.9.0-rc01

18 października 2023 r.

Aplikacja androidx.work:work-*:2.9.0-rc01 została zwolniona. Wersja 2.9.0-rc01 zawiera te zatwierdzenia.

  • Brak zmian od ostatniej wersji beta

Wersja 2.9.0-beta01

6 września 2023 r.

Aplikacja androidx.work:work-*:2.9.0-beta01 została zwolniona. Wersja 2.9.0-beta01 zawiera te zatwierdzenia.

Zmiany w interfejsie API

Wersja 2.9.0-alfa02

26 lipca 2023 r.

Aplikacja androidx.work:work-*:2.9.0-alpha02 została zwolniona. Wersja 2.9.0-alpha02 zawiera te zatwierdzenia.

Nowe funkcje

  • Teraz WorkManager udostępnia wskazówkę, dlaczego instancja robocza została wcześniej zatrzymana. Zapytanie o nią można wysłać do instancji roboczej getStopReason() lub z WorkInfo za pomocą getStopReason().

Zmiany w interfejsie API

  • Element stopReason został dodany do tablicy WorkInfo. Udostępnia stopReason po uruchomieniu instancji roboczej. Może być przydatna przy zgłaszaniu stopReason, ponieważ po zatrzymaniu działania pracownika aplikacja może zostać bardzo szybko zamknięta. (I21386)
  • Zezwalaj na ustawianie zegara w konfiguracji i używanie go do sekwencjonowania wykonywania testów instancji roboczych. (IC586e)
  • Do ListenableWorker dodano metodę getStopReason(), która wskazuje, dlaczego instancja robocza została zatrzymana. (I07060)
  • Dodano element WorkManagerTestInitHelper#closeWorkDatabase(), aby uniknąć ostrzeżenia Closeguard o wycieku zasobów. (Ia8d49)

Poprawki błędów

  • Dodaliśmy możliwość pomijania elementu overrideNextScheduleTime przy użyciu elementu TestDriver i rozwiązaliśmy problemy ze sprawdzaniem poprawności. (Ic2905)

Wersja 2.9.0-alfa01

7 czerwca 2023 r.

Aplikacja androidx.work:work-*:2.9.0-alpha01 została zwolniona. Wersja 2.9.0-alpha01 zawiera te zatwierdzenia.

Nowe funkcje

  • Dostrzegalność przez Flow s Zamiast LiveData postęp instancji roboczej można teraz obserwować za pomocą procesu za pomocą metody WorkManager.getWorkInfosFlow i podobnych metod.
  • Precyzyjne ustalanie harmonogramu okresowych pracowników przy użyciu: setNextScheduleTimeOverride. Umożliwia to dynamiczne obliczanie następnego harmonogramu okresowego pracy, które można wykorzystać do wdrożenia zaawansowanych funkcji, takich jak adaptacyjne czasy odświeżania, niestandardowe zachowanie ponawiania prób lub uruchamianie zasobu roboczego kanału informacyjnego przed każdym rankiem pobudki. Z tymi technikami należy używać funkcji ExistingPeriodicWorkPolicy.UPDATE, aby uniknąć anulowania obecnie uruchomionej instancji roboczej podczas planowania kolejnej.
  • WorkManager przeprowadza testy z dopasowaniem wątków w środowisku produkcyjnym. Funkcji ExecutorsMode.PRESERVE_EXECUTORS możesz użyć, aby zachować wykonawców ustawionych w Configuration i używać rzeczywistego wątku głównego.
  • Interfejsy API Coroutine, takie jak CoroutineWorker, zostały przeniesione z dodatkowego artefaktu work-runtime-ktx do głównego artefaktu work-runtime. Plik 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, CoroutineWorker i inne narzędzia specyficzne dla Kotlin są teraz dostępne w głównym artefakcie work-runtime. (I71a9a)
  • Dodano metodę setNextScheduleTimeOverride, która umożliwia dokładne ustawianie okresowych harmonogramów pracy (I3b4da).
  • Nazwa elementu getEarliestRunTimeMillis została zmieniona na getNextScheduleTimeMillis. (I2bd7a)
  • Informacje o następnym zaplanowanym czasie uruchomienia zostaną dodane do tabeli WorkInfo. (I797e4)
  • Początkowe opóźnienie i okresowość są dodawane do zakresu WorkInfo. (I52f2f)
  • Dodano metodę obserwacji instancji roboczych za pomocą przepływów za pomocą metod getWorkInfosByTagFlow, getWorkInfoByIdFlow, getWorkInfosForUniqueWorkFlow, getWorkInfosFlow (If122a)
  • Dodano brakujące adnotacje @RequiresApi(...) do konstruktorów i właściwości Ograniczenia. Są teraz dostosowane do odpowiednich adnotacji w elementach ustawiających w projekcie Constraints.Builder, które istniały we wczesnych wersjach interfejsu WorkManager. (I6d7d2)
  • W WorkManager obowiązuje teraz oddzielny limit dla instancji roboczych identyfikatora treści, co daje im gwarantowane przedziały w JobScheduler, co pozwala zapobiegać pomijaniu treści podczas dużego obciążenia. Limit można skonfigurować na stronie Configuration.Builder.setContentUriTriggerWorkersLimit. (Ic128f)
  • Ograniczenia zostały dodane do zakresu WorkInfo. (I162c0)

Wersja 2.8

Wersja 2.8.1

22 marca 2023 r.

Aplikacja androidx.work:work-*:2.8.1 została zwolniona. Wersja 2.8.1 zawiera te zatwierdzenia.

Poprawki błędów

  • Naprawiliśmy błąd ANR w RescheduleReceiver, który wcześniej nie obsługiwał 2 jednoczesnych transmisji. (b/236906724)

Wersja 2.8.0

8 lutego 2023 r.

Aplikacja androidx.work:work-*:2.8.0 została zwolniona. Wersja 2.8.0 zawiera te zatwierdzenia.

Ważne zmiany od wersji 2.7.0

Nowe funkcje

Zmiany w interfejsie API

  • Element WorkManager.updateWork został dodany, aby zaktualizować utwór z zachowaniem pierwotnego czasu umieszczenia w kolejce i łańcucha.(I9a248, b/219446409)
  • Dodano użytkownika ExistingPeriodicWorkPolicy.UPDATE Ta zasada umożliwia aktualizowanie utworu okresowego według nazwy. Jest podobny do dotychczasowego elementu REPLACE, ale mniej inwazyjny: nie anuluje działania instancji roboczej, jeśli jest uruchomiona i zachowuje czas w kolejce. Początkowe opóźnienie i okres są obliczane na podstawie czasu pierwotnej kolejki, a nie aktualizacji. Usługa REPLACE została wycofana, aby ułatwić pomyłki między bardzo podobną nazwą REPLACE i UPDATE. Jeśli nadal chcesz zachować poprzednią semantykę właściwości REPLACE, możesz użyć nowo dodanej funkcji CANCEL_AND_REENQUEUE, która jest identyczna z elementem REPLACE. (I985ed, b/219446409)
  • Dodano możliwość przechwytywania wyjątków dotyczących planowania, podając Consumer<Throwable> przez setSchedulingExceptionHandler
  • Dodaliśmy możliwość podania funkcji Consumer<Throwable> za pomocą funkcji setInitializationExceptionHandler w celu określenia, czy podczas próby zainicjowania WorkManagera wystąpiły problemy.
  • Wbudowane pomoce dla usług OneTimeWorkRequest i PeriodicWorkRequest zostały przeniesione z androidx.work:work-runtime-ktx do androidx.work:work-runtime (I0010f, b/209145335)
  • Metody pomocnicze WorkQuery.fromIds, WorkQuery.fromStates, WorkQuery.fromUniqueWorkNames, WorkQuery.fromTags zostały dodane bezpośrednio, aby utworzyć WorkQuery. (b/199919736) (If48f2, b/199919736)
  • Element getForegroundInfo został dodany do listy Worker. (Ic1ead)
  • RxWorker zarówno w przypadku kodu RxJava 2, jak i RxJava 3, ma teraz wartość setForeground zwracającą wartość Completable, której można użyć zamiast setForegroundInfoAsync zwracającego ListenableFuture.
  • RxWorker zarówno w przypadku kodu RxJava 2, jak i RxJava 3, zawiera getForegroundInfo zwracającą wartość Single, której można użyć zamiast getForegroundInfoAsync zwracającego ListenableFuture. (b/203851459)
  • Ograniczenia można teraz tworzyć bezpośrednio, zamiast korzystać z metody Constraints.Builder, co jest wygodne dla użytkowników aplikacji Kotlin. (Idc390, b/137568653)
  • Dodano możliwość sprawdzenia, czy WorkManager został zainicjowany. Dodaliśmy też nowy interfejs API getConfiguration() dla deweloperów bibliotek, aby uzyskać konfigurację, na podstawie której zainicjowano platformę WorkManager. (I6eff3, b/212300336)

Poprawki błędów

  • Rozwiązaliśmy problem z chciwym algorytmem szeregowania, który uniemożliwiał działanie instancji roboczych natychmiast po załadowaniu. (I9686b, b/248111307)
  • Dodano @RequiresPermission do interfejsów API, które wymagają przyznania uprawnienia POST_NOTIFICATIONS w pakiecie SDK 33 i nowszych wersjach. (Ie542e, b/238790278)
  • Zastosuj anulowanie w: CoroutineScope do ListenableFuture, jeśli używasz suspendCancellableCoroutine.

Wersja 2.8.0-rc01

7 grudnia 2022 r.

Aplikacja androidx.work:work-*:2.8.0-rc01 została zwolniona. Wersja 2.8.0-rc01 zawiera te zatwierdzenia.

Nowe funkcje

  • Brak nowych funkcji w tej wersji. To głównie jest wzrost wersji

Wersja 2.8.0-beta02

9 listopada 2022 r.

Aplikacja androidx.work:work-*:2.8.0-beta02 została zwolniona. Wersja 2.8.0-beta02 zawiera te zatwierdzenia.

Poprawki błędów

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

Wersja 2.8.0-beta01

5 października 2022 r.

Aplikacja androidx.work:work-*:2.8.0-beta01 została zwolniona. Wersja 2.8.0-beta01 zawiera te zatwierdzenia.

Poprawki błędów

  • Rozwiązaliśmy problem z chciwym algorytmem szeregowania, który uniemożliwiał działanie instancji roboczych natychmiast po załadowaniu. (I9686b, b/248111307)

Wersja 2.8.0-alfa04

7 września 2022 roku

Aplikacja androidx.work:work-*:2.8.0-alpha04 została zwolniona. Wersja 2.8.0-alpha04 zawiera te zatwierdzenia.

Zmiany w interfejsie API

  • Dodano obiekty WorkerInfo.getGeneration() i WorkerParameters.getGeneration(), które zwracają wygenerowanie instancji roboczej. Instancja robocza ma wiele generacji, jeśli została zaktualizowana za pomocą WorkManager.updateWork lub WorkManager.enqueueUniquePeriodicWork przy użyciu ExistingPeriodicWorkPolicy.UPDATE. Pamiętaj, że jeśli instancja robocza jest obecnie uruchomiona, może ona zwrócić nowszą generację na podstawie aktualnie uruchomionej instancji roboczej, jeśli aktualizacja nastąpiła podczas jej wykonywania. (I665c5, b/219446409) (I128a9, b/219446409)
  • Dodano InitializationExceptionHandler – moduł obsługi wyjątków, który może służyć do określania, czy podczas próby zainicjowania WorkManager wystąpiły problemy. (I061de)

Wersja 2.8.0-alfa03

10 sierpnia 2022 r.

Aplikacja androidx.work:work-*:2.8.0-alpha03 została zwolniona. Wersja 2.8.0-alpha03 zawiera te zatwierdzenia.

Nowe funkcje

  • Dodano możliwość aktualizowania pliku WorkRequests w nieuciążliwy sposób, z zachowaniem pierwotnego czasu umieszczenia w kolejce, tworzenia łańcuchów itp. Aby dowiedzieć się więcej, zobacz WorkManager.updateWork i ExistingPeriodicWorkPolicy.UPDATE.

Zmiany w interfejsie API

  • Element WorkManager.updateWork został dodany, aby zaktualizować utwór z zachowaniem pierwotnego czasu umieszczenia w kolejce i łańcucha.(I9a248, b/219446409)
  • Dodano użytkownika ExistingPeriodicWorkPolicy.UPDATE Ta zasada umożliwia aktualizowanie utworu okresowego według nazwy. Jest podobny do dotychczasowego elementu REPLACE, ale mniej inwazyjny: nie anuluje działania instancji roboczej, jeśli jest uruchomiona i zachowuje czas w kolejce. Początkowe opóźnienie i okres są obliczane na podstawie czasu pierwotnej kolejki, a nie aktualizacji. Funkcja REPLACE została wycofana, aby ułatwić pomyłki między bardzo podobną nazwą REPLACE i UPDATE. Jeśli nadal chcesz zachować poprzednią semantykę właściwości REPLACE, możesz użyć nowo dodanej funkcji CANCEL_AND_REENQUEUE, która jest identyczna z elementem REPLACE. (I985ed, b/219446409)
  • Można dodać możliwość przechwytywania wyjątków planowania przez zdefiniowanie SchedulingExceptionHandler. (I033eb)
  • Wbudowane pomoce dla usług OneTimeWorkRequest i PeriodicWorkRequest zostały przeniesione z androidx.work:work-runtime-ktx do androidx.work:work-runtime (I0010f, b/209145335)

Poprawki błędów

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

Wersja 2.8.0-alfa02

6 kwietnia 2022 roku

Aplikacja androidx.work:work-*:2.8.0-alpha02 została zwolniona. Wersja 2.8.0-alpha02 zawiera te zatwierdzenia.

Zmiany w interfejsie API

  • Ograniczenia można teraz tworzyć bezpośrednio, zamiast korzystać z konstruktora, co jest wygodne dla użytkowników aplikacji Kotlin. (Idc390, b/137568653)
  • Dodano możliwość sprawdzenia, czy WorkManager został zainicjowany. Dodaliśmy też nowy interfejs API getConfiguration() dla deweloperów bibliotek, aby uzyskać konfigurację, na podstawie której zainicjowano platformę WorkManager. (I6eff3, b/212300336)

Wersja 2.8.0-alfa01

12 stycznia 2022 r.

Aplikacja androidx.work:work-*:2.8.0-alpha01 została zwolniona. Wersja 2.8.0-alpha01 zawiera te zatwierdzenia.

Zmiany w interfejsie API

  • Metody pomocnicze WorkQuery.fromStates, WorkQuery.fromUniqueWorkNames i WorkQuery.fromTags zostały dodane, aby bezpośrednio utworzyć element WorkQuery. (If48f2, b/199919736)
  • Dodaje eksperymentalne metody BuildCompat na potrzeby przyszłych pakietów SDK (Iafd82, b/207528937)
  • Dodaj getForegroundInfo do Worker. (Ic1ead)
  • Dodano metody pomocnicze WorkQuery.fromIds do tworzenia WorkQuery bezpośrednio z identyfikatorów. (Ie5bdf, b/199919736)
  • W RxWorker znajduje się teraz setForeground zwracający Completable, którego można użyć zamiast setForegroundInfoAsync zwracającego ListenableFuture. (I85156)
  • RxWorker dla RxJava 2 ma teraz getForegroundInfo zwracającą wartość Single, której można użyć zamiast getForegroundInfoAsync zwracającego ListenableFuture. (I21c91, b/203851459)
  • RxWorker dla RxJava 3 ma teraz getForegroundInfo zwracającą wartość Single, której można użyć zamiast getForegroundInfoAsync zwracającego ListenableFuture. (I1ca8a)
  • W RxWorker znajduje się teraz setForeground zwracający Completable, którego można użyć zamiast setForegroundInfoAsync zwracającego ListenableFuture. (I992a3, b/203851459)

Poprawki błędów

  • Zastosuj anulowanie w: CoroutineScope do ListenableFuture, jeśli używasz suspendCancellableCoroutine. (I77e63)

Wersja 2.7

Wersja 2.7.1

17 listopada 2021 r.

Aplikacja androidx.work:work-*:2.7.1 została zwolniona. Wersja 2.7.1 zawiera te zatwierdzenia.

Poprawki błędów

  • Anulowania w CoroutineScope są przekazywane do ListenableFuture, jeśli korzystasz z suspendCancellableCoroutine. (I77e63)
  • Wyjątek jest zgłaszany natychmiast, gdy opóźnione żądania robocze zostaną oznaczone jako przyspieszone. bef1762

Wersja 2.7.0

13 października 2021 r.

Aplikacja androidx.work:work-*:2.7.0 została zwolniona. Wersja 2.7.0 zawiera te zatwierdzenia.

Ważne zmiany od wersji 2.6.0

  • WorkManager wprowadza nowy interfejs API WorkRequest.Builder.setExpedited(...), aby pomóc w związku z ograniczeniami dotyczącymi usług działających na pierwszym planie w Androidzie 12.

  • Gdy używany jest setExpedited(...), WorkManager przekazuje dostęp do przyspieszonych zadań w JobScheduler na urządzeniach z Androidem 12, jednocześnie zapewniając zgodność wsteczną z poprzednimi wersjami Androida przez przekazanie dostępu usłudze działającej na pierwszym planie.

Wersja 2.7.0-rc01

29 września 2021 r.

Aplikacja androidx.work:work-*:2.7.0-rc01 została zwolniona. Wersja 2.7.0-rc01 zawiera te zatwierdzenia.

Ta wersja jest taka sama jak androidx.work:work-*:2.7.0-beta01.

Wersja 2.7.0-beta01

1 września 2021 roku

Aplikacja androidx.work:work-*:2.7.0-beta01 została zwolniona. Wersja 2.7.0-beta01 zawiera te zatwierdzenia.

Nowe funkcje

  • Ogranicz rywalizację z wieloma procesami SQLite podczas inicjowania zasobu WorkManager.

Zmiany w interfejsie API

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

Poprawki błędów

  • Udostępnij lepszy komunikat o błędzie w przypadku przyspieszonych instancji roboczych, które nie implementują getForegroundInfoAsync(). (Aosp/1809376)

Wersja 2.7.0-alfa05

21 lipca 2021 r.

Aplikacja androidx.work:work-*:2.7.0-alpha05 została zwolniona. Wersja 2.7.0-alpha05 zawiera te zatwierdzenia.

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

Wersja 2.7.0-alfa04

2 czerwca 2021 r.

Aplikacja androidx.work:work-*:2.7.0-alpha04 została zwolniona.

Ta wersja zawiera również zmiany wprowadzone w wersji 2.6.0-beta01.

Zmiany w interfejsie API

  • Interfejs ListenableWorker.setForegroundAsync() nie jest już wycofany.
  • W miarę możliwości zalecamy używanie interfejsu API WorkRequest.Builder.setExpedited(...). Aby zapewnić lepszą obsługę w sytuacjach, gdy aplikacja nie podlega ograniczeniom usługi na pierwszym planie, deweloperzy mogą wykorzystać interfejs ListenableWorker.setForegroundAsync() API.
  • Jeśli funkcja ListenableWorker.setForegroundAsync() jest wywoływana, gdy aplikacja podlega ograniczeniom usługi na pierwszym planie, spowoduje to zgłoszenie błędu ForegroundServiceStartNotAllowedException.

Poprawki błędów

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

Wersja 2.7.0-alfa03

21 kwietnia 2021 r.

Aplikacja androidx.work:work-*:2.7.0-alpha03 została zwolniona. Wersja 2.7.0-alpha03 zawiera te zatwierdzenia.

Nowe funkcje

  • Z poziomu WorkManager 2.6.0-alpha02: dodaje obsługę instancji roboczych, które mogą być uruchamiane w dowolnym procesie. (Iaf200)

  • Z elementu WorkManager 2.6.0-alpha02: dodano element RemoteCoroutineWorker, który jest implementacją RemoteListenableWorker, która może powiązać się z procesem zdalnym. (I30578)

Zmiany w interfejsie API

Wersja 2.7.0-alfa02

10 marca 2021 r.

Aplikacja androidx.work:work-*:2.7.0-alpha02 została zwolniona. Wersja 2.7.0-alpha02 zawiera te zatwierdzenia.

Poprawki błędów

  • Wyraźnie określ zmienność PendingIntent, aby naprawić awarię, która wystąpiła podczas kierowania na Androida 12. (b/180884673)

Wersja 2.7.0-alfa01

18 lutego 2021 r.

Aplikacja androidx.work:work-*:2.7.0-alpha01 została zwolniona. Wersja 2.7.0-alpha01 zawiera te zatwierdzenia.

Nowe funkcje

  • WorkManager wprowadza nowy interfejs API WorkRequest.Builder.setExpedited(...), aby uwzględnić ograniczenia usługi na pierwszym planie w Androidzie 12.

    Aplikacje działające w tle nie mogą już uruchamiać usług na pierwszym planie. Dlatego, aby lepiej obsługiwać długotrwałą pracę, która wcześniej była powiązana z cyklem życia usługi na pierwszym planie, aplikacje mogą oznaczać obiekty WorkRequest jako expedited.

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

    Gdy używany jest setExpedited(...), WorkManager przekazuje dostęp do przyspieszonych zadań w JobScheduler od Androida 12, jednocześnie zapewniając zgodność wsteczną z poprzednimi wersjami Androida przez przekazanie dostępu usługom na pierwszym planie.

Zmiany w interfejsie API

  • Dodaj obsługę przyspieszonych działań typu WorkRequest.

Wersja 2.6.0

Wersja 2.6.0

1 września 2021 roku

Aplikacja androidx.work:work-*:2.6.0 została zwolniona. Wersja 2.6.0 zawiera te zatwierdzenia.

Ważne zmiany od wersji 2.5.0

  • WorkManager używa teraz androidx.startup do inicjowania WorkManagera. Jeśli w przeszłości użyto klasy ContentProvider do zainicjowania WorkManagera, tools:node="remove", 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ą być uruchamiane w dowolnym procesie. (Iaf200)

  • Dodano element RemoteCoroutineWorker, który jest implementacją elementu RemoteListenableWorker, która może powiązać się z procesem zdalnym. (I30578)

Wersja 2.6.0-rc01

4 sierpnia 2021 r.

Aplikacja androidx.work:work-*:2.6.0-rc01 została zwolniona. Wersja 2.6.0-rc01 zawiera te zatwierdzenia.

Ta wersja jest taka sama jak androidx.work:work-*:2.6.0-beta02.

Wersja 2.6.0-beta02

21 lipca 2021 r.

Aplikacja androidx.work:work-*:2.6.0-beta02 została zwolniona. Wersja 2.6.0-beta02 zawiera te zatwierdzenia.

Poprawki błędów

  • Usługa RemoteWorkManager prawidłowo usuwa teraz powiązanie z polem RemoteWorkManagerService, co umożliwia prawidłowe czyszczenie pamięci RemoteWorkManagerService. aosp/1730694
  • Usługa RemoteListenableWorker prawidłowo usuwa teraz powiązanie z polem RemoteWorkerService, co umożliwia prawidłowe czyszczenie pamięci RemoteWorkerService. aosp/1743817
  • ForceStopRunnable działa teraz tylko w głównym procesie aplikacji. Jest to optymalizacja, która pozwala uniknąć 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.

Aplikacja androidx.work:work-*:2.6.0-beta01 została zwolniona. Wersja 2.6.0-beta01 zawiera te zatwierdzenia.

Ta wersja zawiera kilka drobnych ulepszeń w dokumentacji. Wersja jest zasadniczo taka sama jak 2.6.0-alfa02.

Wersja 2.6.0-alfa02

21 kwietnia 2021 r.

Aplikacja androidx.work:work-*:2.6.0-alpha02 została zwolniona. Wersja 2.6.0-alpha02 zawiera te zatwierdzenia.

Nowe funkcje

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

  • Dodano element RemoteCoroutineWorker, który jest implementacją RemoteListenableWorker, która może powiązać się z procesem zdalnym. (I30578)

Zmiany w interfejsie API

  • Dodano obsługę ograniczenia sieci TEMPORARILY_UNMETERED. (I08d5e)
  • Obsługa instancji roboczych wieloprocesowych w usłudze setProgressAsync(). (Ib6d08)
  • Udostępnij plik WorkManagerInitializer publicznie, aby inne obiekty androidx.startup.Initializer mogły używać ich jako zależności. (I5ab11).

Wersja 2.6.0-alfa01

24 marca 2021 r.

Aplikacja androidx.work:work-*:2.6.0-alpha01 została zwolniona. Wersja 2.6.0-alpha01 zawiera te zatwierdzenia.

Nowe funkcje

  • WorkManager do inicjowania WorkManagera używa teraz androidx.startup. Wcześniej zajmował się tym użytkownik androidx.work.impl.WorkManagerInitializer. (Aosp/1608813)

    Jeśli w przeszłości był używany tools:node="remove" ContentProvider cykl życia procesu używany do inicjowania cyklu życia procesu w przeszłości, musisz wykonać 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 zgłoszenie błędu SecurityException podczas korzystania z interfejsów API AlarmManager. (Aosp/1587518)

Wersja 2.5.0

Wersja 2.5.0

27 stycznia 2021 r.

Aplikacja androidx.work:work-*:2.5.0 została zwolniona. Wersja 2.5.0 zawiera te zatwierdzenia.

Ważne zmiany od wersji 2.4.0

  • Nowy artefakt :work:work-multiprocess dla aplikacji, które korzystają z wielu procesów. Pozwala to zwiększyć wydajność, ponieważ łączy harmonogram żądań pracy w jeden proces.
    • Aby użyć funkcji work-multiprocess, zdefiniuj zależność: implementation "androidx.work:work-multiprocess:2.5.0"
    • Wyznacz proces podstawowy przy użyciu metody Configuration.Builder.setDefaultProcessName(String).
    • Jeśli używasz usługi work-multiprocess, chcesz też używać narzędzia RemoteWorkManager do zarządzania urządzeniami WorkRequest. RemoteWorkManager zawsze kontaktuje się z wyznaczonym procesem. Algorytm szeregowania w procesie działa też w wyznaczonym procesie.
  • Czasami ActivityManager nie może utworzyć instancji JobService, aby uruchomić zadanie. W efekcie podstawowe zadanie jest pomijane z powodu błędu platformy. WorkManager gwarantuje teraz, że istnieją zadania zapasowe dla każdego WorkRequest podczas inicjowania Application przez uzgadnianie zadań. Znacznie zwiększa to niezawodność wykonywania zadań. (b/172475041, aosp/1489577)
  • WorkManager ogranicza wzrost bazy danych, skracając czas buforowania, który WorkRequest s są śledzone po zakończeniu WorkRequest. Poprzedni czas trwania wyniósł 7 dni. Skrócono do 1 dnia + czas trwania keepResultsForAtLeast. (Aosp/1419708)
  • TestListenableWorkerBuilder obsługuje teraz zmodyfikowaną klasę o rozszerzeniu ListenableWorker, aby ułatwić testowanie. (Aosp/1443299, b/169787349)
  • Inspektor WorkManager jest teraz dostępny podczas korzystania z Android Studio Arctic Fox.

Wersja 2.5.0-rc01

13 stycznia 2021 r.

Aplikacja androidx.work:work-*:2.5.0-rc01 została zwolniona. Wersja 2.5.0-rc01 zawiera te zatwierdzenia.

Poprawki błędów

  • Naprawiono błąd, który powodował, że podczas korzystania z interfejsu API opartego na WorkQuery atrybut getWorkInfosLiveData nie był prawidłowo unieważniany po zaktualizowaniu elementów. (Aosp/1540566, b/173769028)
  • Naprawiliśmy błąd polegający na tym, że w rzadkich przypadkach transakcje z bazą danych nie były oznaczane jako udane. Powoduje to problemy na niektórych urządzeniach Motorola. (Aosp/1535368, b/175944460)
  • Naprawiliśmy błąd polegający na ignorowaniu NoSuchElementException podczas próby usunięcia powiązania z niedziałającym procesem. (Aosp/1530589)
  • Ulepsz ConstraintTrackingWorker, aby zatrzymywał interfejs ListenableWorker tylko wtedy, gdy nie został jeszcze zatrzymany. (Aosp/1496844, b/172946965)
  • Zaktualizuj biblioteki androidx.work, aby kierować je na język Java 8 (Ibd2f2)

Wersja 2.5.0-beta02

Grudzień 2, 2020

Aplikacja androidx.work:work-*:2.5.0-beta02 została zwolniona. Wersja 2.5.0-beta02 zawiera te zatwierdzenia.

Poprawki błędów

  • Naprawiliśmy błąd w androidx.work:work-multiprocess, który powodował, że usługa WorkManager nieumyślnie blokowała wywołujący wątek podczas próby powiązania ze wskazanym procesem. (Aosp/1475538)
  • Naprawiono błąd, który powodował, że żądania PeriodicWorkRequest nie były prawidłowo uzgadniane. (b/172475041, aosp/1489577)
  • Dodaliśmy obejście błędu związanego z platformą 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.

Aplikacja androidx.work:work-*:2.5.0-beta01 została zwolniona. Wersja 2.5.0-beta01 zawiera te zatwierdzenia.

Nowe funkcje

  • WorkManager automatycznie ogranicza liczbę WorkRequest s, które może odebrać algorytm szeregowania w procesie. Żądania są nadal wykonywane na mocy nakazu FIFO. (Aosp/1455228)
  • WorkManager próbuje przywrócić magazyn danych aplikacji 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 później zmienić. (Aosp/1455618, b/170273988)

Wersja 2.5.0-alfa03

14 października 2020 r.

Aplikacja androidx.work:work-*:2.5.0-alpha03 została zwolniona. Wersja 2.5.0-alpha03 zawiera te zatwierdzenia.

Zmiany w interfejsie API

  • Typy TestListenableWorkerBuilder i TestWorkerBuilder nie korzystają z nieprzetworzonych typów. (I883ad, b/169787349)

Poprawki błędów

  • Użyj parametru ApplicationInfo, aby określić nazwę domyślnego procesu aplikacji. (b/168716641, aosp/1429950)
  • Popraw reguły widoczności elementów RemoteWorkManager i RemoteWorkContinuation. Te interfejsy API nie są już oznaczone jako @Restricted. (Aosp/1432091)
  • Popraw reguły ProPard dla: :work:work-multiprocess. (Aosp/1432091)
  • Usprawnij cykle życia powiadomień w przypadku długotrwałych zadań powiązanych z usługą na pierwszym planie. (b/168502234, aosp/1431331)

Wersja 2.5.0-alfa02

16 września 2020 roku

Aplikacja androidx.work:work-*:2.5.0-alpha02 została zwolniona. Wersja 2.5.0-alpha02 zawiera te zatwierdzenia.

Nowe funkcje

  • Dodaj interfejs API do WorkQuery, aby móc używać interfejsów id do wysyłania zapytań o elementy WorkInfo. (Aosp/1412372, b/157335295)
  • WorkManager lepiej obsługuje aplikacje, które używają wielu procesów przy użyciu nowego artefaktu (androidx.work:work-multiprocess:*). Pomaga on rozwiązać kilka problemów, z którymi mają do czynienia duże aplikacje:
    • Zwykle należy go zainicjować w każdym procesie aplikacji. Nie jest to świetna sprawa, ponieważ rośnie rywalizacja o SQLite, co z kolei powoduje inne problemy. WorkManager ma teraz nowe interfejsy API, których można użyć do wyznaczenia głównego procesu aplikacji za pomocą Configuration#setDefaultProcessName(processName). processName to w pełni kwalifikowana nazwa procesu, która wygląda jak packageName:processName (np. com.example:remote).
    • Zestaw nowych interfejsów API: od RemoteWorkManager i RemoteWorkContinuation do żądań roboczych enqueue, cancel i query. Te interfejsy API nie obejmują wariantów LiveData, które pozwalają uniknąć rywalizacji dotyczącej SQLite między wieloma procesami. Wszystkie połączenia z numerami enqueue, cancel i query są przekierowywane do procesu aplikacji primary przy użyciu AIDL, który zwraca poziom ListenableFuture. (aosp/1392657, aosp/1411210, aosp/1412215, aosp/1417713)

Zmiany w interfejsie API

  • WorkManager bardziej agresywnie zmniejsza ukończone zadania WorkRequest, które nie mają niekompletnych zależności. Czas trwania bufora zmieniono z 7 dni na 1 dzień. (Aosp/1419708)

Poprawki błędów

  • WorkManager obecnie proaktywnie uzgadnia zadania, aby zadania WorkRequest i JobScheduler były synchronizowane po zainicjowaniu WorkManager. (Aosp/1412794, b/166292069)

Wersja 2.5.0-alfa01

19 sierpnia 2020 r.

Aplikacja androidx.work:work-*:2.5.0-alpha01 została zwolniona. Wersja 2.5.0-alpha01 zawiera te zatwierdzenia.

Nowe funkcje

  • Zmiany w wewnętrznych interfejsach API, które pozwolą nam udostępniać lepsze narzędzia w WorkManager. Wkrótce podamy więcej informacji na ten temat.

Poprawki błędów

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

Wkład z zewnątrz

Wersja 2.4.0

Wersja 2.4.0

22 lipca 2020 r.

Aplikacja androidx.work:work-*:2.4.0 została zwolniona. Wersja 2.4.0 zawiera te zatwierdzenia.

Ważne zmiany od wersji 2.3.0

  • Algorytm szeregowania w procesie WorkManager ma teraz większe możliwości. Wcześniej w ramach procesu Scheduler brane pod uwagę były tylko te zadania, które nie były opóźnione i które nie zostały spełnione. Teraz algorytm szeregowania w procesie śledzi żądania WorkRequest, które mogą być wykonywane w przyszłości, w tym PeriodicWorkRequests. Scheduler w procesie również nie przestrzega limitów harmonogramu (ale nadal jest ograniczony do rozmiaru zasobu Executor używanego przez WorkManager). Oznacza to, że aplikacja może teraz wykonywać znacznie więcej żądań WorkRequests, gdy działa na pierwszym planie. Aby zarządzać wykonaniem opóźnionych prac na pierwszym planie, WorkManager wprowadza również nową konfigurowalną wersję RunnableScheduler. (Aosp/1185778)
  • WorkManager obsługuje teraz język RxJava 3. Aby używać kodu RxJava 3, musisz uwzględnić tę zależność: implementation "androidx.work:work-rxjava3:2.4.0". (Aosp/1277904)
  • Dodano możliwość wysyłania zapytań dotyczących WorkInfo przy użyciu WorkQuery. Jest to przydatne, gdy deweloperzy chcą wysyłać zapytania do WorkInfo za pomocą kombinacji wielu atrybutów. Więcej informacji znajdziesz tutaj: WorkQuery.Builder.fromStates(...), WorkQuery.Builder. fromTags(...) i WorkQuery.Builder.fromUniqueWorkNames(...). (Aosp/1253230, b/143847546)
  • Dodaj możliwość wysyłania żądań informacji diagnostycznych do WorkManager za pomocą:

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

    Znajdziesz tam wiele przydatnych informacji, w tym:

    • Żądania robocze, które zostały ukończone w ciągu ostatnich 24 godzin.
    • Żądania robocze, które są obecnie URUCHOMIONE.
    • Zaplanowane żądania robocze. (Aosp/1235501)
  • Dodaj atrybut ExistingWorkPolicy.APPEND_OR_REPLACE, który jest podobny do metody APPEND, ale zastępuje łańcuch, w którym wymagania wstępne zostały anulowane lub nie zostały spełnione. (b/134613984, aosp/1199640)

  • Daj możliwość dodania niestandardowego elementu RunnableScheduler, aby śledzić żądania WorkRequest, które będą musiały zostać wykonane w przyszłości. Jest ona używana przez algorytm szeregowania w procesie. (Aosp/1203944)

  • W przypadku używania DelegatingWorkerFactory dodaj obsługę dynamicznego dodawania fabryk, do których chcesz przekazać dostęp. (b/156289105, aosp/1309745)

  • Dokładniej dostosuj śledzenie pod kątem ograniczeń typu BATTERY_NOT_LOW do platformy. (Aosp/1312583)

  • Algorytm szeregowania w procesie używa teraz lepszych interfejsów API do określania nazwy procesu. Pozwala to lepiej obsługiwać aplikacje korzystające z wielu procesów. (Aosp/1324732)

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

    • Właściwy atrybut foregroundServiceType podczas korzystania z interfejsów API setForegroundAsync(). (b/147873061, aosp/1215915)
    • Podaj identyfikatory JobScheduler, których usługa WorkManager ma używać podczas bezpośredniego używania interfejsów JobService API. aosp/1223567
    • Dodaliśmy nową regułę lintowania, która sprawia, że ListenableWorkerimplementacje przy korzystaniu z domyślnej wartości WorkerFactory mają teraz wartość public. (Aosp/1291262)
  • Połączenia z numerem setForegroundAsync(), które nie zostaną ukończone przed ukończeniem zadania ListenableWorker, będą teraz sygnalizowane przez IllegalStateException na zwróconym ListenableFuture. (Aosp/1262743)

  • Popraw błąd, który sprawia, że interfejs ForegroundService nie jest zatrzymywany po przerwaniu działania interfejsu Worker na pierwszym planie. (b/155579898, aosp/1302153)

  • Popraw błąd, w wyniku którego WorkManager próbuje wykonać wiele instancji obiektu Worker powiązanego z usługą działającej na pierwszym planie (b/156310133, aosp/1309853)

Wersja 2.4.0-rc01

24 czerwca 2020 r.

Aplikacja androidx.work:work-*:2.4.0-rc01 została zwolniona. Wersja 2.4.0-rc01 zawiera te zatwierdzenia.

Poprawki błędów

  • Algorytm szeregowania w procesie używa teraz lepszych interfejsów API do określania nazwy procesu. Pozwala to lepiej obsługiwać aplikacje korzystające z wielu procesów. (Aosp/1324732)

Wersja 2.4.0-beta01

20 maja 2020 r.

Opublikowano androidx.work:work-gcm:2.4.0-beta01, androidx.work:work-runtime:2.4.0-beta01, androidx.work:work-runtime-ktx:2.4.0-beta01, androidx.work:work-rxjava2:2.4.0-beta01 i androidx.work:work-testing:2.4.0-beta01. Wersja 2.4.0-beta01 zawiera te zatwierdzenia.

Poprawki błędów

  • Popraw błąd, który sprawia, że interfejs ForegroundService nie jest zatrzymywany po przerwaniu działania interfejsu Worker na pierwszym planie. (b/155579898, aosp/1302153)
  • Popraw błąd, w którym WorkManager próbuje wykonać wiele instancji obiektu Worker powiązanego z usługą działającej na pierwszym planie (b/156310133, aosp/1309853)
  • W przypadku używania DelegatingWorkerFactory dodaj obsługę dynamicznego dodawania fabryk, do których chcesz przekazać dostęp. (b/156289105, aosp/1309745)
  • Dokładniej dostosuj śledzenie pod kątem ograniczeń typu BATTERY_NOT_LOW do platformy. (Aosp/1312583)

Wersja 2.4.0-alfa03

29 kwietnia 2020 r.

Aplikacja androidx.work:work-*:2.4.0-alpha03 została zwolniona. Wersja 2.4.0-alpha03 zawiera te zatwierdzenia.

Nowe funkcje

  • WorkManager obsługuje teraz język RxJava 3. Aby używać kodu RxJava 3, musisz uwzględnić tę zależność: implementation "androidx.work:work-rxjava3:2.4.0-alpha03". (Aosp/1277904)
  • Dodaliśmy nową regułę lintowania, która sprawia, że ListenableWorkerimplementacje przy korzystaniu z domyślnej wartości WorkerFactory mają teraz wartość public. (Aosp/1291262)

Zmiany w interfejsie API

  • Wywołanie setProgressAsync() po zakończeniu wykonywania kodu ListenableWorker będzie teraz sygnalizowało Exception przez ListenableFuture. (Aosp/1285494)
  • WorkQuery.Builder jest teraz oznaczony jako final. (Aosp/1275037)
  • Zmieniono nazwy metod fabrycznych w WorkQuery.Builder withStates, withTags i withUniqueWorkNames na fromStates, fromTags i fromUniqueWorkNames. (Aosp/1280287)

Poprawki błędów

Wersja 2.4.0-alfa02

1 kwietnia 2020 r.

Aplikacja androidx.work:work-*:2.4.0-alpha02 została zwolniona. Wersja 2.4.0-alpha02 zawiera te zatwierdzenia.

Nowe funkcje

  • Dodano nową regułę Lint, która ostrzega, gdy WorkRequest wymaga zarówno zasady Constraints.setRequiresCharging(...), jak i Constraints.setRequiresDeviceIdle(...). Niektóre urządzenia nigdy się nie ładują i są nieaktywne. W związku z tym żądania tego rodzaju byłyby uruchamiane rzadziej, niż oczekiwano. (Aosp/1253840)

Zmiany w interfejsie API

  • Dodano możliwość wysyłania zapytań dotyczących WorkInfo przy użyciu WorkQuery. Jest to przydatne, gdy deweloperzy chcą wysyłać zapytania do WorkInfo za pomocą kombinacji wielu atrybutów. Więcej informacji znajdziesz tutaj: WorkQuery.Builder withStates(...), WorkQuery.Builder withTags(...) i WorkQuery.Builder withUniqueWorkNames(...). (Aosp/1253230, b/143847546)

  • Połączenia z numerem setForegroundAsync(), które nie zostaną ukończone przed ukończeniem zadania ListenableWorker, będą teraz sygnalizowane przez IllegalStateException na zwróconym ListenableFuture. (Aosp/1262743)

Poprawki błędów

  • Naprawiliśmy regułę lintowania, która sprawdza nieprawidłowe czasy trwania interwałów PeriodicWorkRequest s. (Aosp/1254846, b/152606442)

Wersja 2.4.0-alfa01

4 marca 2020 r.

Aplikacja androidx.work:work-*:2.4.0-alpha01 została zwolniona. Wersja 2.4.0-alpha01 zawiera te zatwierdzenia.

Nowe funkcje

  • Algorytm szeregowania w procesie WorkManager ma teraz większe możliwości. Wcześniej algorytm szeregowania w procesie brał pod uwagę tylko wykonanie zadań, które nie były opóźnione i których ograniczenia były spełnione. Teraz algorytm szeregowania w procesie śledzi parametry WorkRequest, które mogą być wykonywane w przyszłości, w tym PeriodicWorkRequest. Algorytm szeregowania w procesie nie przestrzega też limitów harmonogramu (ale nadal jest ograniczony do rozmiaru Executor używanego przez WorkManager). Oznacza to, że aplikacja może teraz wykonywać znacznie więcej zadań WorkRequest, gdy działa na pierwszym planie. (Aosp/1185778)

  • Dodaliśmy możliwość wysyłania żądań informacji diagnostycznych z WorkManagera za pomocą adb shell am broadcast -a "androidx.work.diagnostics.REQUEST_DIAGNOSTICS" -p "<your_app_package_name>". Znajdziesz tam wiele przydatnych informacji, w tym:

    • Żądania robocze, które zostały ukończone w ciągu ostatnich 24 godzin.
    • Żądania robocze, które są obecnie URUCHOMIONE.
    • Zaplanowane żądania robocze. (Aosp/1235501)
  • Nowe reguły Lint, które wymuszają:

    • Właściwy atrybut foregroundServiceType podczas korzystania z interfejsów API setForegroundAsync(). (b/147873061, aosp/1215915)
    • Określam identyfikatory JobScheduler, których WorkManager ma używać podczas bezpośredniego używania interfejsów API JobService. (Aosp/1223567)

Zmiany w interfejsie API

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

  • Zapewnij możliwość dodania niestandardowego elementu RunnableScheduler, aby śledzić zdarzenia WorkRequest, które trzeba wykonać w przyszłości. Jest ona używana przez algorytm szeregowania w procesie. (Aosp/1203944)

Poprawki błędów

  • Wycofano właściwość setProgress() w metodzie RxWorker, ponieważ wcześniej zwracała wartość Single<Void>, która jest niemożliwa. Dodaliśmy nowy interfejs API setCompletableProgress(), który zamiast tego zwraca wartość Completable, oraz dodano nowe reguły Lint, które ułatwiają migrację do nowych interfejsów API. (b/150080946, aosp/1242665)

Wersja 2.3.4

Wersja 2.3.4

18 marca 2020 r.

Aplikacja androidx.work:work-*:2.3.4 została zwolniona. Wersja 2.3.4 zawiera te zatwierdzenia.

Poprawki błędów

  • Naprawiliśmy błąd, który powodował uruchamianie wielu wystąpień długo trwających działów Worker po przekroczeniu 10-minutowego okna wykonywania. (Aosp/1247484, b/150553353)
  • Naprawiono lint IssueRegistry w usłudze WorkManager. Dziękujemy @ZacSweers ze Slacka za Twój wkład. (Aosp/1217923)

Wersja 2.3.3

Wersja 2.3.3

4 marca 2020 r.

Aplikacja androidx.work:work-*:2.3.3 została zwolniona. Wersja 2.3.3 zawiera te zatwierdzenia.

Poprawki błędów

  • Naprawiono błąd, który powodował, że po przerwaniu wydarzenia Worker nie można było poprawnie zaplanować wydarzenia. (b/150325687, aosp/1246571)

Wersja 2.3.2

Wersja 2.3.2

19 lutego 2020 r.

androidx.work:work-*:2.3.2 zostało zwolnione. Wersja 2.3.2 zawiera te zatwierdzenia.

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował, że w rzadkich przypadkach aplikacja WorkManager przekracza limit 100 zadań w JobScheduler. (Aosp/1226859, b/149092520)
  • Poprawiono warunek wyścigu w kontrolerze ConstraintController. (Aosp/1220100)
  • Ulepszyliśmy cykl życia usługi na pierwszym planie w przypadku długo działających instancji roboczych. (Aosp/1226295)
  • Ulepszyliśmy zarządzanie anulowaniem powiadomień w przypadku długotrwałych anulowania funkcji Worker on Worker. (Aosp/1228346)

Wersja 2.3.1

Wersja 2.3.1

5 lutego 2020 r.

Aplikacja androidx.work:work-*:2.3.1 została zwolniona. Wersja 2.3.1 zawiera te zatwierdzenia.

Poprawki błędów

  • Lepiej zarządzaj cyklem życia elementów Notification w przypadku długotrwałych komponentów typu Worker, które działają, gdy aktywny jest pierwszy plan Service. (Aosp/1218539, b/147249312)
  • WorkManager wymaga teraz wersji stabilnej androidx.sqlite:sqlite-framework:2.1.0. (Aosp/1217729)
  • Dodano reguły lintowania, aby zapewnić, że foregroundServiceType jest określony w AndroidManifest.xml, gdy używasz foregroundServiceType w ForegroundInfo. (Aosp/1214207, b/147873061)

Wersja 2.3.0

Wersja 2.3.0

22 stycznia 2020 r.

Wersja androidx.work:work-*:2.3.0 została udostępniona bez zmian od 2.3.0-rc01. Wersja 2.3.0 zawiera te zatwierdzenia.

Ważne zmiany od wersji 2.2.0

  • Pomoc przy długotrwałej lub ważnej pracy dzięki ListenableWorker#setForegroundAsync().
  • Obsługa postępu instancji roboczej w ListenableWorker#setProgressAsync().
  • WorkManager dodaje teraz do biblioteki dodatkowe reguły lintowania, co pomaga wychwytywać błędy na wczesnym etapie.

Wersja 2.3.0-rc01

Styczeń 8, 2020

Aplikacja androidx.work:work-*:2.3.0-rc01 została zwolniona. Wersja 2.3.0-rc01 zawiera te zatwierdzenia.

Ta wersja jest taka sama jak w wersji 2.3.0-beta02

Poprawki błędów

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

Wersja 2.3.0-beta02

18 grudnia 2019 r.

Aplikacja androidx.work:work-*:2.3.0-beta02 została zwolniona. Wersja 2.3.0-beta02 zawiera te zatwierdzenia.

Nowe funkcje

  • Dodaliśmy lepszy komunikat o błędzie dotyczący niemożliwych do odzyskania wyjątków wyjątków SQLite. (Aosp/1185777)
  • Dodano regułę lintowania, która zapewnia usunięcie dostawcy treści androidx.work.impl.WorkManagerInitializer z AndroidManifest.xml podczas korzystania z inicjowania na żądanie. (Aosp/1167007)
  • Dodano ostrzeżenie o likwidacjach lin w sytuacji, gdy dla PeriodicWorkRequest zamiast enqueueUniquePeriodicWork() jest używany język enqueue(). (Aosp/1166032)

Zmiany w interfejsie API

  • ForegroundInfo wymaga teraz określenia notificationId, który ma być używany, gdy używasz ListenableWorker.setForegroundAsync(). Jest to niezbędna zmiana. Dzięki temu możesz uruchomić równolegle wiele długotrwałych komponentów Worker. WorkManager lepiej zarządza też czasami życia podanych elementów Notification. (b/145473554, aosp/1181208, asop/1181216, asop/1183577)

Poprawki błędów

  • Naprawiliśmy błąd w implementacji aplikacji AlarmManager, który powodował, że alarmy nie były prawidłowo czyszczone. (Aosp/1156444)
  • Naprawiono błąd, który powodował, że pusta lista elementów WorkRequest powodowała utworzenie nieprawidłowego łańcucha WorkContinuation. (b/142835274, aosp/1157051)

Zmiany zależności

  • WorkManager korzysta teraz z Pokoju 2.2.2.

Wersja 2.3.0-beta01

20 listopada 2019 r.

Aplikacja androidx.work:work-*:2.3.0-beta01 została zwolniona. Wersja 2.3.0-beta01 zawiera te zatwierdzenia.

Nowe funkcje

  • Dodaliśmy nową regułę lintowania, która zapobiega błędom programistycznym spowodowanym nieprawidłową implementacją androidx.work.Configuration.Provider w przypadku inicjowania na żądanie. aosp/1164559

Wersja 2.3.0-alfa03

23 października 2019 r.

Aplikacja androidx.work:work-*:2.3.0-alpha03 została zwolniona. Wersja 2.3.0-alpha03 zawiera te zatwierdzenia.

Nowe funkcje

  • Dodano interfejs API WorkManager.createCancelPendingIntent(), który ułatwia anulowanie komponentów WorkRequest bez konieczności rejestrowania kolejnego komponentu w AndroidManifest.xml. Ten interfejs API szczególnie ułatwia anulowanie działań WorkRequest z Notification. Planujemy połączyć go z nowymi interfejsami API działających na pierwszym planie w wersji 2.3.0.
  • WorkManager korzysta teraz ze stabilnej wersji androidx.room:*:2.2.0.

Zmiany w interfejsie API

  • Nazwa ForegroundInfo.getNotificationType() została zmieniona na ForegroundInfo.getForegroundServiceType(), aby była bardziej spójna z interfejsami API platformy. (b/142729893, aosp/1143316)

Poprawki błędów

  • Naprawiliśmy błąd spowodowany niepotrzebnym wywołaniem funkcji setTransactionSuccessful() poza transakcją. Zdarza się to w przypadku rzadkich migracji. (b/142580433, aosp/1141737)

Wersja 2.3.0-alfa02

9 października 2019 r.

Aplikacja androidx.work:work-*:2.3.0-alpha02 została zwolniona. Wersja 2.3.0-alpha02 zawiera te zatwierdzenia.

Nowe funkcje

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

Zmiany w interfejsie API

  • Nazwa interfejsu API containsKey w Data została zmieniona na hasKeyWithValueOfType. Nazwa odpowiedniej metody rozszerzenia w bibliotece ktx również została zmieniona. (b/141916545)

Poprawki błędów

  • Harmonogramy WorkManager działają prawidłowo, gdy zbliża się liczba limitów harmonogramu w kolejce WorkRequest. (Aosp/1105766)
  • WorkManager wywołuje metodę ListenableWorker#onStopped() tylko wtedy, gdy praca nie została jeszcze ukończona. (b/140055777)
  • WorkManager usuwa teraz informacje o postępach, gdy instancja robocza zostanie przerwana lub osiągnie swój stan terminala. (Aosp/1114572)
  • Data ma teraz znacznie bardziej użyteczną toString()reprezentację. (b/140945323)
  • Funkcja Data ma teraz lepszą metodę equals(). Obsługuje również typ deepEquals dla typu Array. (b/140922528)
  • Usługa WorkManager przechowuje teraz wewnętrzną bazę danych i pliki ustawień w katalogu bez kopii zapasowych. (b/114808216)

Wersja 2.3.0-alfa01

22 sierpnia 2019 r.

Aplikacja androidx.work:work-*:2.3.September 5, 20190-alpha01 została zwolniona. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

Nowe funkcje

  • Użytkownicy ListenableWorker mogą teraz ustawiać postęp za pomocą interfejsu API setProgressAsync(). W CoroutineWorker dodano też odpowiedni interfejs API setProgress obsługujący suspend i setProgress w RxWorker, który zwraca 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że służyć do sprawdzania, czy dane wejściowe funkcji Worker mają klucze o oczekiwanym typie. (b/117136838)
  • Data może być teraz serializowany za pomocą Data.toByteArray() i Data.fromByteArray(). Pamiętaj, że usługa Data nie gwarantuje obsługi wersji, więc nie należy jej utrzymywać ani używać na potrzeby IPC między aplikacjami. Można ich bezpiecznie używać tylko w wielu procesach w tej samej aplikacji.
  • Dodano możliwość określenia InputMergerFactory w Configuration.setInputMergerFactory. (b/133273159)

Zmiany w interfejsie API

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

Poprawki błędów

  • Algorytm szeregowania w procesie ignoruje teraz reguły WorkRequest z ograniczeniem idle. Te prośby są teraz odbierane przez usługę JobScheduler tylko wtedy, gdy urządzenie faktycznie to idle. (Aosp/1089779)
  • TestScheduler teraz prawidłowo używa w testach określonego elementu Executor jako wewnętrznego wykonawcy zadania. (Aosp/1090749)

Wersja 2.2.0

Wersja 2.2.0

15 sierpnia 2019 r.

Aplikacja androidx.work:work-*:2.2.0 została zwolniona. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

Ta wersja jest taka sama jak androidx.work:work-*:2.2.0-rc01.

Ważne zmiany w wersji 2.2.0 z 2.1.0

androidx.work:work-gcm:2.2.0 to nowy artefakt Maven, który umożliwia używanie GCMNetworkManager jako algorytmu szeregowania, gdy Usługi Google Play są dostępne dla interfejsów API na poziomie 22. Jest to opcjonalna zależność, która pomaga zwiększyć niezawodność i wydajność przetwarzania 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ę GCMNetworkManagera. Jeśli Usługi Google Play są niedostępne, aplikacja WorkManager będzie nadal używać aplikacji AlarmManager na starszych urządzeniach.

Wersja 2.2.0-rc01

30 lipca 2019 r.

Aplikacja androidx.work:work-*:2.2.0-rc01 została zwolniona. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

Poprawki błędów

  • Naprawiliśmy błąd w implementacji AlarmManagera, który powodował przedwczesne wyłączenie usługi, a w rzadkich przypadkach powodując błąd RejectedExecutionException. (Aosp/1092374) (b/138238197).
  • Dodaliśmy obejście problemu NullPointerException występującego podczas używania interfejsów API JobScheduler na niektórych urządzeniach. (Aosp/1091020) (b/138364061), (b/138441699)

Wersja 2.2.0-beta02

19 lipca 2019 r.

Aplikacja androidx.work:work-*:2.2.0-beta02 została zwolniona. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

Poprawki błędów

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

Wersja 2.2.0-beta01

17 lipca 2019 r.

Aplikacja androidx.work:work-*:2.2.0-beta01 została zwolniona. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

Nowe funkcje

  • androidx.work:work-gcm:2.2.0-beta01 to nowy artefakt Maven, który umożliwia używanie GCMNetworkManager jako algorytmu szeregowania, gdy Usługi Google Play są dostępne dla interfejsów API na poziomie 22. Jest to opcjonalna zależność, która zwiększa niezawodność i wydajność przetwarzania w tle w przypadku starszych wersji interfejsu API. Jeśli Twoja aplikacja korzysta z Usług Google Play, dodaj tę zależność do pliku Gradle, aby automatycznie uzyskać obsługę GCMNetworkManagera. Jeśli Usługi Google Play są niedostępne, aplikacja WorkManager będzie nadal używać aplikacji AlarmManager na starszych urządzeniach.

Poprawki błędów

  • Poprawiono błąd IllegalArgumentException związany ze śledzeniem stanu sieci na tabletach Nvidia Shield K1. (Aosp/1010188)

Wersja 2.1.0

Wersja 2.1.0

11 lipca 2019 r.

Aplikacja androidx.work:work-*:2.1.0 została zwolniona. Ta wersja jest taka sama jak androidx.work:work-*:2.1.0-rc01.

Ważne zmiany od wersji 2.0.1

  • work-runtime-ktx wymaga teraz środowiska Java 8. Jeśli napotkasz jakieś problemy, możesz dodać do build.gradle te informacje: kotlinOptions { jvmTarget = "1.8" }
  • Dodano inicjalizację na żądanie dla WorkManagera, która spowoduje utworzenie zasobu WorkManager tylko wtedy, gdy się do niego odwołasz. b/127497100 Aby skonfigurować w projekcie inicjowanie na żądanie:
    1. Wyłącz automatyczny inicjator.
    2. Zaimplementuj Configuration.Provider w niestandardowym obiekcie Application.
    3. Zmień wszystkie odwołania do WorkManager.getInstance() na WorkManager.getInstance(Context). W związku z tą zmianą wycofaliśmy WorkManager.getInstance(). Zawsze bezpieczniej jest wywołać nowy zamiennik WorkManager.getInstance(Context), nawet jeśli nie inicjujesz na żądanie.
  • PeriodicWorkRequest obsługuje teraz początkowe opóźnienia. Możesz użyć metody setInitialDelay w PeriodicWorkRequest.Builder, aby ustawić początkowe opóźnienie. b/111404867
  • Dodaliśmy możliwość przekazywania dostępu do co najmniej 1 zarejestrowanego użytkownika WorkerFactory za pomocą DelegatingWorkerFactory. b/131435993
  • Dodaliśmy możliwość dostosowywania funkcji Executor, których używa WorkManager, aby prowadzić wewnętrzne procesy księgowe w usłudze Configuration.Builder.setTaskExecutor.
  • Dodaliśmy możliwość tworzenia możliwych do przetestowania klas Worker i ListenableWorker przy użyciu TestWorkerBuilder i TestListenableWorkerBuilder w artefaktie work-testing.
    • 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 maksymalnego rozmiaru obiektów Data.
  • WorkManager korzysta teraz z usługi Room 2.1.0, która powinna rozwiązać niektóre problemy z bazą danych.

Wersja 2.1.0-rc01

27 czerwca 2019 r.

Aplikacja androidx.work:work-*:2.1.0-rc01 została zwolniona. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

Poprawki błędów

  • Naprawiono błąd, który powodował awarię aplikacji podczas wykonywania zadań z użyciem JobScheduler podczas tworzenia kopii zapasowej b/135858602.

Wersja 2.1.0-beta02

20 czerwca 2019 r.

Aplikacja androidx.work:work-*:2.1.0-beta02 została zwolniona. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

Poprawki błędów

  • Podczas tworzenia instancji ListenableWorker TestListenableWorkerBuilder używa teraz poprawnego pola WorkerFactory. b/135275844
  • Naprawiono błąd, który powodował dryfy w oknach wykonywania zadań WorkRequest z powodu śmierci procesu. b/135272196

Wersja 2.1.0-beta01

13 czerwca 2019 r.

Aplikacja androidx.work:work-*:2.1.0-beta01 została zwolniona. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

Poprawki błędów

  • WorkManager korzysta teraz z usługi Room 2.1.0, która powinna rozwiązać niektóre problemy z bazą danych.
  • Usunięto część wejścia-wyjścia dysku startowego w wątku głównym.
  • Usunięto potencjalne zakleszczenie w śledzeniu ograniczeń. b/134361006
  • Z wyprzedzeniem anulowano nieprawidłowe zadania przypisane do WorkManagera. b/134058261
  • Dodano wywołania obronne do interfejsów JobScheduler API dla wadliwie działających urządzeń.

Wersja 2.1.0-alfa03

5 czerwca 2019 r.

Aplikacja androidx.work:*:2.1.0-alpha03 została zwolniona.

Poprawki błędów

  • Ulepszona dokumentacja systemów PeriodicWorkRequest.
  • WorkManagerTestInitHelper podczas testów używa teraz prawidłowego wykonawcy działającego w tle.
  • Poprawki błędów dotyczących SQLite występujących 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 typowych dla OEM w implementacji funkcji JobScheduler podczas planowania zadań za pomocą WorkManagera.
  • Ulepszenia algorytmu szeregowania opartego na AlarmManager, które obejmują czas eksploatacji usługi, który wcześniej powodował rzadkie awarie. (b/133313734)

Wersja 2.1.0-alfa02

16 maja 2019 r.

Opublikowano wersję WorkManager 2.1.0-alfa02. Ta wersja zawiera kilka nowych interfejsów API.

Zmiany w interfejsie API

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

  • Dodaliśmy możliwość przekazywania dostępu do co najmniej 1 zarejestrowanego użytkownika WorkerFactory za pomocą DelegatingWorkerFactory. b/131435993

  • Dodaliśmy możliwość dostosowywania funkcji Executor, których używa WorkManager, aby prowadzić wewnętrzne procesy księgowe w usłudze Configuration.Builder.setTaskExecutor.

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

Wersja 2.1.0-alfa01

24 kwietnia 2019 r.

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

Zmiany w interfejsie API

  • Dodano inicjalizację na żądanie dla WorkManagera, która spowoduje utworzenie zasobu WorkManager tylko wtedy, gdy się do niego odwołasz. b/127497100 Aby skonfigurować w projekcie inicjowanie na żądanie:
    1. Wyłącz automatyczny inicjator.
    2. Zaimplementuj Configuration.Provider w niestandardowym obiekcie Application.
    3. Zmień wszystkie odwołania do WorkManager.getInstance() na WorkManager.getInstance(Context). W związku z tą zmianą wycofaliśmy WorkManager.getInstance(). Zawsze bezpieczniej jest wywołać nowy zamiennik WorkManager.getInstance(Context), nawet jeśli nie inicjujesz na żądanie.
  • Dodaliśmy możliwość tworzenia możliwych do przetestowania klas Worker i ListenableWorker przy użyciu TestWorkerBuilder i TestListenableWorkerBuilder w artefaktie work-testing.
    • 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 maksymalnego rozmiaru obiektów Data.
  • Wycofano: CoroutineWorker.coroutineContext. To pole zostało nieprawidłowo wpisane jako pole CoroutineDispatcher. Nie jest już potrzebne, ponieważ możesz samodzielnie otworzyć odpowiedni coroutineContext w treści funkcji zawieszania.
  • Parametry RxWorker.createWork() i RxWorker.getBackgroundScheduler() są teraz oznaczone adnotacjami typu @NonNull.

Wersja 2.0.1

Wersja 2.0.1

9 kwietnia 2019 r.

Prezentujemy WorkManager 2.0.1. Ta wersja jest taka sama jak 2.0.1-rc01.

Wersja 2.0.1-rc01

3 kwietnia 2019 r.

Udostępniono 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ą też widoczne w 1.0.1-rc01.

Poprawki błędów

  • Testy Robolectric działają teraz prawidłowo z WorkManagerem. b/122553577
  • Naprawiliśmy awarię przypadków granicznych, w wyniku których śledzenie ograniczeń nie było czyszczone w interfejsach API używanych przed JobScheduler. b/129226383
  • Naprawiono błąd StackOverflowError związany z długimi łańcuchami zadań. b/129091233
  • Zaktualizowaliśmy dokumentację dotyczącą komponentów PeriodicWorkRequest, aby wskazać, że interfejs API 23 nie obsługuje czasu elastycznego.
  • Naprawiliśmy kilka uszkodzonych linków w dokumentacji Kotlin.

Wersja 2.0.0

Wersja 2.0.0

20 marca 2019 r.

Prezentujemy WorkManager 2.0.0. Ta wersja jest taka sama jak wersja 2.0.0-rc01 i jest stabilną wersją AndroidaX 1.0.0 z zależnościami AndroidaX. Zalecamy kierowanie na tę wersję, a nie na starsze wersje 1.x. Wszystkie aktywne aplikacje przeznaczone dla programistów w wersjach 2.x i 1.x będą otrzymywać poprawki krytycznych błędów tylko przez ograniczony czas.

Wersja 2.0.0-rc01

7 marca 2019 r.

Udostępniono WorkManager 2.0.0-rc01. Ta wersja jest taka sama jak wersja stabilna 1.0.0, ale ma zależności AndroidX. Zalecamy dodanie tej wersji, gdy wersja 2.0.0 będzie stabilna. Starsze wersje 1.x będą zawierać tylko kilka krytycznych poprawek. Wszystkie aktywne aplikacje będą kierowane na wersję 2.x.

Zależności sprzed AndroidaX

Informacje o korzystaniu z rozszerzeń Kotlin znajdziesz w dokumentacji KTX.
Dokumentacja: Java

Odlotowy

dependencies {
    def work_version = "1.0.1"

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

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

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

Kotlin

dependencies {
    val work_version = "1.0.1"

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

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

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

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

Wersja 1.0.1

Wersja 1.0.1

9 kwietnia 2019 r.

Prezentujemy WorkManager 1.0.1. Ta wersja jest taka sama jak 1.0.1-rc01.

Zdecydowanie zachęcamy użytkowników do przejścia na WorkManager 2.x, ponieważ gałąź 1.x będzie zawierać bardzo mało aktualizacji. Nie będą też publikowane nowe interfejsy API w wersji 1.x.

Wersja 1.0.1-rc01

2 kwietnia 2019 r.

Udostępniono 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
  • Naprawiliśmy awarię przypadków granicznych, w wyniku których śledzenie ograniczeń nie było czyszczone w interfejsach API używanych przed JobScheduler. b/129226383
  • Naprawiono błąd StackOverflowError związany z długimi łańcuchami zadań. b/129091233

Wersja 1.0.0

Wersja 1.0.0

5 marca 2019 r.

Jest to stabilna wersja 1.0.0 systemu WorkManager. Ta wersja WorkManagera jest taka sama jak wersja 1.0.0-rc02.

Wersja 1.0.0-rc02

21 lutego 2019 r.

To druga kandydaturę stabilnej wersji WorkManager 1.0.0. Ta wersja zawiera dwie poprawki błędów.

Poprawki błędów

  • Po awarii aplikacji harmonogramy Worker są teraz poprawnie zaplanowane. b/124546316

  • Elementy Worker, które zwracają niesprawdzoną metodę Exception, są teraz prawidłowo oznaczane jako FAILED i nie powodują już awarii procesu aplikacji.

Wersja 1.0.0-rc01

14 lutego 2019 r.

To jest kandydat do wydania stabilnej wersji WorkManager 1.0.0. Ta wersja zawiera jedną poprawkę błędu.

Poprawki błędów

  • Implementacja oparta na usłudze AlarmManager prawidłowo obsługuje teraz okna flex dla żądań PeriodicWorkRequest. b/124274584

Wersja 1.0.0-beta05

6 lutego 2019 r.

Ta wersja zawiera poprawki błędów.

Poprawki błędów

  • Naprawiono przypadek, w którym w interfejsie API 23 była używana funkcja JobScheduler.getPendingJob(...). b/123893059
  • Usunięto błąd NullPointerException na urządzeniach z Androidem 5.1 (poziom interfejsu API 22) lub niższym. b/123835104

Wersja 1.0.0-beta04

4 lutego 2019 r.

Ta wersja zawiera poprawki błędów.

Poprawki błędów

  • Ulepszyliśmy planowanie PeriodicWork na potrzeby implementacji AlarmManager.
  • Rozwiązaliśmy problem, który powodował, że aplikacja WorkManager nie mogła prawidłowo śledzić ograniczeń podczas korzystania z implementacji opartej na AlarmManager. b/123379508
  • Rozwiązano problem, który powodował, że usługa WorkManager nie mogła ponawiać próby w wyniku śmierci procesu przy użyciu implementacji opartej na AlarmManager. b/123329850
  • Naprawiliśmy przypadek, który powodował wyciek blokad uśpienia z usługi WorkManager przy użyciu implementacji opartej na AlarmManager.

Wersja 1.0.0-beta03

25 stycznia 2019 r.

Ta wersja zawiera poprawki błędów.

Poprawki błędów

  • Wprowadziliśmy regresję 1.0.0-beta02, która w niektórych sytuacjach sprawiała, że zadania nie były wykonywane poprawnie. b/123211993
  • Naprawiono problem polegający na tym, że praca nieprawidłowo uznawała czas do ponowienia. b/122881597
  • Usunięto błąd ConcurrentModificationException na urządzeniach z Androidem 5.1 (API) lub starszym. To kontynuacja poprawki w aplikacji 1.0.0-beta02. b/121345393
  • Dodaliśmy exported=false w przypadku niektórych komponentów w naszym pliku manifestu, w których brakuje tej adnotacji.
  • Informacje o tym, jak WorkManager współpracuje z systemem operacyjnym, znajdziesz w dokumentacji na poziomie pakietu.

Wersja 1.0.0-beta02

15 stycznia 2019 r.

Ta wersja zawiera poprawki błędów.

Poprawki błędów

  • Naprawiono przypadek skrajny, w którym na urządzeniach z Androidem 6.0 (poziom interfejsu API 23) okresowa praca mogła być wykonywana więcej niż raz w danym okresie. b/121998363
  • Usunięto błąd ConcurrentModificationException na urządzeniach z Androidem 5.1 (poziom interfejsu API 22) lub starszym. b/121345393
  • Naprawiliśmy błędne wykonywanie zadań, gdy ograniczenia nie były spełnione na urządzeniach z Androidem 5.1 (poziom interfejsu API 22) lub niższym. b/122578012
  • Zoptymalizowana obsługa zadań wykonywanych w celu przyspieszenia w niektórych przypadkach skrajnych. b/122358129
  • Dodaliśmy zmianę, która uwzględniała potencjalne warunki wyścigu w wielu wystąpieniach obiektu LiveData używanego przez WorkManager.
  • Przeniesiono do użycia zależności Room 1.1.1 zamiast 1.1.1-rc01. Te wersje są identyczne. b/122578011

Wersja 1.0.0-beta01

19 grudnia 2018 r.

Ta wersja nie wprowadza żadnych zmian w interfejsie API. Od tej pory aplikacja WorkManager powinna pozostać stabilna do czasu następnej wersji, chyba że wystąpi problem krytyczny. Ta wersja zawiera poprawki błędów.

Poprawki błędów

  • Elementy podrzędne, które zostały wcześniej anulowane, nie będą już uruchamiane. b/120811767
  • Prawidłowo zainicjowane klasy logowania (wyświetlane głównie podczas testów).

Wersja 1.0.0-alfa13

12 grudnia 2018 r.

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

Zmiany w interfejsie API

  • Użytkownik androidx.work.Result został przeniesiony do klasy wewnętrznej użytkownika ListenableWorker. Zapobiega to konfliktom refaktoryzacji z klasą Result najwyższego poziomu Kotlin. Jest to niezgodna zmiana w interfejsie API. b/120564418

Najnowsze zmiany w interfejsie API

  • Użytkownik androidx.work.Result został przeniesiony do klasy wewnętrznej użytkownika ListenableWorker.

Wersja 1.0.0-alfa12

5 grudnia 2018 r.

Ta wersja zawiera zmiany w interfejsie API, które naruszają zasady. Zapoznaj się z sekcją Breaking API changes poniżej. Prawdopodobnie zostanie ona opublikowana jako pierwsza wersja beta. alpha12 zawiera też obszerne aktualizacje dokumentacji.

Zmiany w interfejsie API

  • Nowy artefakt: work-rxjava2, przedstawia: RxWorker. To jest ListenableWorker, który wymaga podania wartości Single<Payload>.
  • Obsługa usługi JobDispatcher w Firebase została wycofana z powodu zbliżającego się jej wycofania. Oznacza to, że podczas przechodzenia do wersji beta artefakt work-firebase nie będzie już aktualizowany. W przyszłości rozważymy dodanie takiego rozwiązania.
  • Łączono: Payload w: Result. Result jest teraz „zaklejoną klasą” z 3 konkretnymi implementacjami, które można uzyskać za pomocą Result.success() (lub Result.success(Data)), Result.failure() (lub Result.failure(Data)) i Result.retry(). Wyniki z Twojego źródła danych (ListenableFuture) dają teraz wynik Result zamiast Payload. Metody Worker nie mają metod pobierania ani ustawiania dla danych wyjściowych Data. Jest to niezbędna zmiana.
  • Dodano atrybuty Constraints.Builder.setTriggerContentMaxDelay(long, TimeUnit) i Constraints.Builder.setTriggerContentUpdateDelay(long, TimeUnit) oraz warianty, aby lepiej obsługiwać identyfikatory URI treści powoli aktywujące się. b/119919774
  • Dodano WorkRequest.Builder.setBackoffCriteria(BackoffPolicy, Duration) wariant. Ta metoda wymaga interfejsu API 26.
  • Dodano metody rozszerzenia Kotlin: Operation.await() i ListenableFuture.await().
  • Nazwa elementu Operation.getException() została zmieniona na Operation.getThrowable(). Jest to niezbędna zmiana.
  • Klasa ContentUriTriggers i metody odwołujące się do niej nie są już dostępne publicznie. Jest to niezbędna zmiana.
  • Aby uprościć interfejs API, usunięto pozostałe metody varargs w funkcjach WorkManager, WorkContinuation i OneTimeWorkRequest. Aby rozwiązać problemy z kompilacją, możesz opakować istniejące zmienne Vararg za pomocą atrybutu Arrays.asList(...). Nadal uwzględniamy wersje z jednym argumentem w każdej metodzie. Jest to niezbędna zmiana.
  • Usunięto WorkContinuation.combine(OneTimeWorkRequest, *) warianty. Prezentował interfejs API niejasny, a dotychczasowe metody combine są bardziej zrozumiałe. Jest to niezbędna zmiana.

Poprawki błędów

  • Implementacje przed Marshmallow są teraz bardziej niezawodne, jeśli chodzi o reagowanie na śmierć procesu w przypadku już wykonywanego zadania.
  • Funkcja LiveData obserwowana przez observeForever jest śledzona przez WorkManager. To jest wsteczna poprawka z Biblioteki pokoi. b/74477406
  • Data.Builder.build() zgłasza teraz wyjątek, jeśli zserializowany obiekt przekracza swój maksymalny rozmiar. Wcześniej zdarzało się to tylko w wątku w tle, w którym nie można było prawidłowo go obsłużyć.
  • Dalsze odróżnianie zadań zatrzymane i anulowane. W okresie ListenableWorker.onStopped() getWorkInfoById() zwróci WorkInfo z CANCELLED State.
  • Traktuj null Result jako niepowodzenia w ListenableWorker. b/120362353
  • Poprawka spekulacyjna dla tabletów Shield obsługującego interfejs API 24, który czasem zwracał błąd IllegalArgumentException. b/119484416

Najnowsze zmiany w interfejsie API

  • Obsługa usługi JobDispatcher w Firebase została wycofana z powodu zbliżającego się jej wycofania. Oznacza to, że podczas przechodzenia do wersji beta artefakt work-firebase nie będzie już aktualizowany. W przyszłości rozważymy dodanie takiego rozwiązania.
  • Łączono: Payload w: Result. Result jest teraz „zaklejoną klasą” z 3 konkretnymi implementacjami, które można uzyskać za pomocą Result.success() (lub Result.success(Data)), Result.failure() (albo Result.failure(Data)) i Result.retry(). Wyniki z Twojego źródła danych (ListenableFuture) dają teraz wynik Result zamiast Payload. Metody Worker nie mają metod pobierania ani ustawiania dla danych wyjściowych Data.
  • Dodano metody rozszerzenia Kotlin: Operation.await() i ListenableFuture.await().
  • Nazwa elementu Operation.getException() została zmieniona na Operation.getThrowable().
  • Klasa ContentUriTriggers i metody odwołujące się do niej nie są już dostępne publicznie.
  • Aby uprościć interfejs API, usunięto pozostałe metody varargs w funkcjach WorkManager, WorkContinuation i OneTimeWorkRequest. Aby rozwiązać problemy z kompilacją, możesz opakować istniejące zmienne Vararg za pomocą atrybutu Arrays.asList(...). Nadal uwzględniamy wersje z jednym argumentem w każdej metodzie.
  • Usunięto WorkContinuation.combine(OneTimeWorkRequest, *) warianty. Prezentował interfejs API niejasny, a dotychczasowe metody combine są bardziej zrozumiałe.

Wersja 1.0.0-alfa11

8 listopada 2018 r.

Ta wersja zawiera wiele zmian, które staną się stabilnym interfejsem API w wersji beta. W tej wersji wprowadzono niezbędne zmiany w interfejsie API. Zapoznaj się z sekcją Breaking API changes poniżej.

Zmiany w interfejsie API

  • work-runtime-ktx przedstawia nowe urządzenie CoroutineWorker.
  • Nazwa konta WorkStatus została zmieniona na WorkInfo. Wszystkie odpowiadające im warianty metody getStatus zostały zmienione na odpowiadające im warianty getWorkInfo. Jest to niezbędna zmiana.
  • ListenableWorker.onStopped() nie akceptuje już argumentu logicznego, który wskazuje, czy element WorkRequest został anulowany. WorkManager nie wprowadza już tego rozróżnienia. Jest to niezbędna zmiana.
  • Nazwa pakietu androidx.work.test została zmieniona na pakiet androidx.work.testing. Jest to niezbędna zmiana.
  • Metody ustawiające w Constraints nie są już częścią publicznego interfejsu API. Jest to niezbędna zmiana.
  • Metody WorkerParameters.getTriggeredContentUris() i WorkerParameters.getTriggeredContentAuthorities() zwróciły wcześniej tablice. Teraz te metody zwracają kolekcje. Jest to niezbędna zmiana.
  • Nazwa aplikacji ListenableWorker.onStartWork() została zmieniona na ListenableWorker.startWork(). Jest to niezbędna zmiana.
  • Konstruktor WorkStatus nie jest już częścią publicznego interfejsu API. Jest to niezbędna zmiana.
  • Nazwy Configuration.getMaxJobSchedulerID() i Configuration.getMinJobSchedulerID() zostały zmienione na Configuration.getMinJobSchedulerId() i Configuration.getMaxJobSchedulerId(). Jest to niezbędna zmiana.
  • Do publicznego interfejsu API dodaliśmy wiele adnotacji @NonNull, aby poprawić ergonomię interfejsu API.
  • Dodaj interfejs WorkManager.enqueueUniqueWork() API, aby umieszczać w kolejce unikalne elementy OneTimeWorkRequest bez konieczności tworzenia WorkContinuation.
  • Wszystkie warianty metod enqueue i cancel w WorkManager zwracają teraz nowy typ Operation. Jest to niezbędna zmiana.
  • Żadne warianty typu enqueue nie obsługują już zmiennych zmiennych typu WorkRequest. Jest to niezbędna zmiana. Zamiast tego użyj Kolekcji. Do zmiany istniejącego kodu możesz użyć Arrays.asList(). Zrobiliśmy to, aby ograniczyć liczbę powierzchni i metod API.
  • Próba initialize WorkManager więcej niż raz na proces spowoduje teraz IllegalStateException. Jest to niezbędna zmiana.

Poprawki błędów

  • Elementy WorkRequest.Builder w artefakcie work-runtime-ktx używają teraz komponentów ListenableWorker. Poprawki b/117666259
  • Upewnij się, że następne uruchomienie instancji PeriodicWork przypada w przyszłości. Poprawki b/118204399
  • Usuń potencjalne wejście/wyjście dysku, jeśli używasz WorkManagera podczas uruchamiania aplikacji. Poprawki b/117796731
  • Popraw warunki wyścigu w: WorkConstraintsTracker. Naprawia błąd android-workmanager/issues/56.

Najnowsze zmiany w interfejsie API

  • Nazwa konta WorkStatus została zmieniona na WorkInfo. Wszystkie odpowiadające im warianty metody getStatus zostały zmienione na odpowiadające im warianty getWorkInfo.
  • ListenableWorker.onStopped() nie akceptuje już argumentu logicznego, który wskazuje, czy element WorkRequest został anulowany. WorkManager nie wprowadza już tego rozróżnienia.
  • Nazwa pakietu androidx.work.test została zmieniona na pakiet androidx.work.testing.
  • Metody ustawiające w Constraints nie są już częścią publicznego interfejsu API.
  • Metody WorkerParameters.getTriggeredContentUris() i WorkerParameters.getTriggeredContentAuthorities() zwróciły wcześniej tablice. Teraz te metody zwracają kolekcje.
  • Nazwa aplikacji ListenableWorker.onStartWork() została zmieniona na ListenableWorker.startWork().
  • Konstruktor WorkStatus nie jest już częścią publicznego interfejsu API.
  • Nazwy Configuration.getMaxJobSchedulerID() i Configuration.getMinJobSchedulerID() zostały zmienione na Configuration.getMinJobSchedulerId() i Configuration.getMaxJobSchedulerId().
  • Wszystkie warianty metod enqueue i cancel w WorkManager zwracają teraz nowy typ Operation.
  • Żadne warianty typu enqueue nie obsługują już zmiennych zmiennych typu WorkRequest.
  • Próba initialize WorkManager więcej niż raz na proces spowoduje teraz IllegalStateException.

Wersja 1.0.0-alfa10

11 października 2018 r.

Ta wersja obsługuje asynchroniczną pracę kontrolowaną przez dewelopera. W tej wersji wprowadzono niezbędne zmiany w interfejsie API. Zapoznaj się z sekcją Breaking API changes poniżej.

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

Zmiany w interfejsie API

  • Usunięto wszystkie metody i klasy, które wcześniej deprecated, a zwłaszcza domyślny konstruktor Worker. Jest to niezgodna zmiana w interfejsie API.
  • Nazwa NonBlockingWorker została zmieniona na ListenableWorker, która jest teraz odkrytą klasą publiczną i jest gotowa do użycia.
    • Metoda ListenableWorker zapewnia dostęp do 1 metody abstrakcyjnej ListenableFuture<Payload> onStartWork(), która jest wywoływana w wątku głównym. To Ty musisz rozpocząć i przetwarzać asynchroniczną pracę. Gdy skończysz, musisz odpowiednio zaktualizować ListenableFuture. Referencyjne implementacje ListenableFuture są dostępne w pakiecie Futures w języku alpha02 (patrz sekcja WorkManager poniżej).
    • Komponent Worker rozszerza zakres ListenableWorker i nadal działa jak wcześniej, z użyciem metody abstrakcyjnej Result doWork().
    • Niektóre metody i członków zostały losowo zmienione z Worker na ListenableWorker.
    • Wkrótce udostępnimy referencyjne implementacje ListenableWorker, które używają współprogramów Kotlin (po opublikowaniu stabilnych wersji) i RxJava2.
  • Interfejs WorkerFactory i konkretna implementacja DefaultWorkerFactory zostały scalone w klasę abstrakcyjną o nazwie WorkerFactory. Implementacja zapewnia, że domyślne zachowanie oparte na odczuciach jest wywoływane w ramach ostatniej próby w przypadku wszystkich instancji WorkerFactory utworzonych przez użytkowników. Jest to niezbędna zmiana.
  • Usunięto metody WorkManager.synchronous() i WorkContinuation.synchronous() oraz wszystkie powiązane metody. Dodano ListenableFuture<Void> jako zwracany typ wielu metod w interfejsie API. Jest to niezgodna zmiana w interfejsie API.
    • Możesz teraz synchronicznie pobierać i obserwować zdjęcia, korzystając z komponentów ListenableFuture. Na przykład WorkManager.enqueue() zwracał kiedyś wynik void, a teraz zwraca wartość ListenableFuture<Void>. Możesz wywołać ListenableFuture.addListener(Runnable, Executor) lub ListenableFuture.get(), aby uruchomić kod po zakończeniu operacji.
    • Pamiętaj, że te ListenableFuture nie informują o tym, czy operacja się udała czy nie. tylko o jego zakończeniu. Aby uzyskać te informacje, nadal musisz powiązać metody WorkManager w łańcuch.
    • Ignorujemy wywołania cancel() dotyczące tych obiektów, ponieważ są one niejasne i trudne w uzasadnieniu (czy anulujesz operację czy wynikową pracę?). Zgodnie z umową Future.
    • Aby zachować spójność z synchronicznymi metodami getStatus*, udostępniliśmy warianty ListenableFuture i zmieniliśmy nazwy istniejących wariantów, które zwracały wartości LiveData, tak aby zawierały „LiveData” w nazwie (np. getStatusesByIdLiveData(UUID)). Jest to niezbędna zmiana w interfejsie API.

Poprawki błędów

  • Naprawiono znany problem z wersji alfa09 dotyczący zduplikowanych 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 Prokoparda, by zachować nowy konstruktor Worker. b/116296569
  • Popraw potencjalną wartość NullPointerException w warunkach wyścigu, dla których zadanie było REPLACE. b/116253486 i b/116677275
  • WorkContinuation.combine() akceptuje teraz co najmniej 1 komponent WorkContinuation zamiast 2 lub więcej elementów. b/117266752

Najnowsze zmiany w interfejsie API

  • Usunięto wszystkie metody i klasy, które wcześniej deprecated, a zwłaszcza domyślny konstruktor Worker.
  • Interfejs WorkerFactory i konkretna implementacja DefaultWorkerFactory zostały scalone w klasę abstrakcyjną o nazwie WorkerFactory.
  • Usunięto WorkManager.synchronous() i WorkContinuation.synchronous().
  • Metody WorkManager.getStatus*() zwracają teraz wartości ListenableFuture. WorkManager.getStatus*LiveData(): powrót LiveData.

Wersja 1.0.0-alfa09

19 września 2018 r.

Znany problem

Jeśli napotkasz ten problem: „Znaleziono więcej niż 1 plik ze ścieżką niezależną od systemu operacyjnego „META-INF/proguard/androidx-annotations.pro”, umieść poniższy kod w pliku Gradle jako tymczasowe obejście do czasu, gdy rozwiążemy ten problem w wersji alfa10:

Odlotowy

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

Kotlin

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

Poprawki błędów

  • Dodaliśmy kolejną poprawkę niezbędną do wystąpienia błędu „100 zadań”. b/115560696
  • Dodaliśmy kilka poprawek błędów związanych z ograniczeniami klucza obcego spowodowanymi warunkami wyścigu. b/114705286
  • Przekazano wywołania ConstraintTrackingWorker.onStopped(boolean) do bazowej instancji Worker. b/114125093
  • Wymuszaj prawidłowe minimalne opóźnienie ponowienia dla Firebase JobDispatcher. b/113304626
  • Ulepszona funkcja podziału na wątki gwarantuje wewnętrzny charakter biblioteki.
  • Napraw potencjalny problem z wewnętrznym usuwaniem duplikatów LiveData.

Zmiany w interfejsie API

  • Możesz teraz tworzyć własne instancje Worker w czasie działania, określając WorkerFactory w komponencie WorkManager.Configuration. Fabryka zastępcza to DefaultWorkerFactory. Pasuje do wcześniejszych wersji WorkManagera.
    • Domyślne konstruktory Worker i NonBlockingWorker są teraz oznaczone jako wycofane. Użyj nowego konstruktora (Worker(Context, WorkerParameters)) i wywołaj super(Context, WorkerParameters). W przyszłych wersjach WorkManagera zostanie usunięty domyślny konstruktor.
  • Zaczęliśmy korzystać z nowego artefaktu ListenableFuture wewnętrznie (bez zależności Gujawa). W kolejnych wersjach wprowadzimy do interfejsu API ListenableFutures. Ta zmiana umożliwi późniejsze odkrycie elementu NonBlockingWorker.
  • Dodano możliwość uruchamiania pracy na czas w aplikacji TestDriver za pomocą TestDriver.setInitialDelayMet(UUID) i TestDriver.setPeriodDelayMet(UUID). b/113360060

Niezbędne zmiany

  • Domyślne konstruktory Worker i NonBlockingWorker zostały wycofane. Jak najszybciej przejdź na nowy konstruktor. W kolejnych wersjach zostanie usunięty domyślny konstruktor.

Wersja 1.0.0-alfa08

27 sierpnia 2018 r.

Poprawki błędów

  • Wyraźnie oznaczono komponenty WorkManagera jako nieświadome i nie są one uruchamiane bezpośrednio podczas rozruchu bezpośredniego. W przyszłości udostępnimy wersję WorkManagera z bezpośrednim rozruchem. b/112665532
  • Rozwiązaliśmy problem, który powodował, że ponawiana praca nie była uruchamiana. b/112604021
  • Ustalona praca okresowa nie powtarzała się wielokrotnie (związane z tym problemem). b/112859683
  • Uznawane zasady wycofywania, gdy proces aplikacji jest już uruchomiony.
  • Poprawiliśmy komunikaty o wyjątkach w pliku Data, aby wskazać, że limit wynosi 10 KB.
  • Zmniejszono maksymalną wartość z Configuration.setMaxSchedulerLimit(int) do 50, aby uwzględnić czas oczekiwania na zakończenie przetwarzania JobScheduler. b/112817355

Wersja 1.0.0-alfa07

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órych wykonanie zostało ukończone, są teraz prawidłowo anulowane wszystkie oczekujące kopie tej pracy w innych algorytmach szeregowania. Doprowadziło to do przekroczenia limitu JobScheduler zadań. b/111569265
  • Naprawiono ConcurrentModificationException w ConstraintTracker. b/112272753
  • Adnotacje typu zwracanego kodu Data.getBooleanArray(String) i Data.getIntArray(String) zostały zmienione na @Nullable zamiast @NonNull. b/112275229

Zmiany w interfejsie API

  • Worker przedłuża teraz nowe zajęcia: NonBlockingWorker. Nie ma to wpływu na bieżące wykorzystanie. W przyszłości NonBlockingWorker stanie się w pełni obsługiwanym elementem w przypadku niestandardowych rozwiązań do obsługi wątków.
  • Adnotacje typu zwracanego kodu Data.getBooleanArray(String) i Data.getIntArray(String) zostały zmienione na @Nullable zamiast @NonNull. b/112275229
  • Rozszerzenia Kotlin: wycofano interfejs Map.toWorkData() i dodano workDataOf(vararg Pair<String, Any?>) najwyższego poziomu, aby zapewnić większą spójność z istniejącymi interfejsami API.

Wersja 1.0.0-alfa06

1 sierpnia 2018 r.

Poprawki błędów

  • Zapobiegaj blokadzie bazy danych podczas planowania pracy. b/111801342
  • Popraw błąd, przez który PeriodicWork nie uruchamia się zgodnie z harmonogramem w trybie uśpienia. b/111469837
  • Napraw warunki wyścigu, gdy śledzisz ograniczenia, które powodują awarię WorkManager. googlecodelabs/android-workmanager/issues/56
  • Jeśli używasz WorkRequest.Builder#build(), utwórz niepowtarzalne elementy WorkRequest. b/111408337
  • Włącz korzystanie z właściwości RescheduleReceiver tylko wtedy, gdy potrzebne są komponenty WorkRequest. b/111765853

Wersja 1.0.0-alfa05

24 lipca 2018 r.

Zmiany w interfejsie API

  • Adnotacje WorkManager.getInstance() mają teraz postać @NonNull zamiast @Nullable. Jeśli natomiast singleton nie zostanie poprawnie zainicjowany w przypadku inicjowania ręcznego, metoda spowoduje zgłoszenie błędu IllegalStateException. Jest to przełomowa zmiana w interfejsie API.
  • Dodaliśmy nowy interfejs API Configuration.Builder.setMinimumLoggingLevel(int), który może kontrolować szczegółowość w usłudze WorkManager. Domyślnie WorkManager rejestruje dane Log.INFO i nowsze.
  • Zmieniono podpis interfejsu Data.getString(), więc nie przyjmuje on już wartości domyślnej (domyślnie null). Jest to niezgodna zmiana w interfejsie API.
  • Niektóre metody potrzebne tylko do użytku wewnętrznego oznaczono jako @hide. Obejmuje to konstruktor Constraints, Data.toByteArray() i Data.fromByteArray(byte[]). Jest to niezgodna zmiana w interfejsie API.

Poprawki błędów

  • WorkManager nie wykonuje już zadań w znanych przypadkach automatycznej kopii zapasowej. Mogło to spowodować awarię. b/110564377
  • Poprawiono podwójne harmonogramy PeriodicWorkRequest s przy korzystaniu z metody JobScheduler. b/110798652
  • Naprawiono problem z prawidłowym działaniem funkcji PeriodicWorkRequest po uśpieniu urządzenia. b/111469837
  • Rozwiązaliśmy problem z początkowymi opóźnieniami podczas korzystania z Firebase JobDispatcher. b/111141023
  • Naprawiliśmy kilka potencjalnych problemów z warunkami i czasem wyścigu.
  • Prawidłowo zwolniono BroadcastReceiver elementy, które nie były już potrzebne.
  • Zoptymalizowano przekładanie wydajności na ponowne uruchomienie aplikacji po wymuszeniu zamknięcia.
  • Zezwolono na wywołanie funkcji TestScheduler.setAllConstraintsMet(UUID) przed umieszczeniem danego elementu WorkRequest w kolejce lub po nim. b/111238024

Niezbędne zmiany

  • Adnotacje WorkManager.getInstance() mają teraz postać @NonNull zamiast @Nullable.
  • Zmieniono podpis elementu Data.getString(), więc nie przyjmuje już wartości domyślnej (domyślnie null).
  • Niektóre metody potrzebne tylko do użytku wewnętrznego oznaczono jako @hide. Obejmuje to konstruktor Constraints, Data.toByteArray() i Data.fromByteArray(byte[]).

Wersja 1.0.0-alfa04

26 czerwca 2018 r.

Poprawki błędów

  • Harmonogramy PeriodicWorkRequest są teraz prawidłowo przekładane w przypadku korzystania z implementacji opartej na AlarmManager.
  • Naprawiono potencjalny błąd ANR, który występował podczas przekładania wszystkich instancji roboczych po wymuszeniu zatrzymania lub ponownym uruchomieniu. b/110507716
  • Dodano adnotacje wartości null do różnych interfejsów API WorkManager. b/110344065
  • Loguj niewykryte wyjątki, które występują podczas wykonywania instancji roboczej. b/109900862
  • Dozwolone niszczycielskie migracje bazy danych w przypadku przywrócenia starszej wersji WorkManagera. b/74633270
  • Naprawiono awarię migracji podczas tworzenia zduplikowanych tagów niejawnych. Jest to bardzo rzadki problem, który występuje tylko wtedy, gdy samodzielnie używasz tego samego formatu tagu niejawnego.

Wersja 1.0.0-alfa03

19 czerwca 2018 r.

Poprawki błędów

  • Naprawiono warunek wyścigu w implementacji opartej na AlarmManager. b/80346526.

  • Naprawiono zduplikowane zadania podczas korzystania z JobScheduler po ponownym uruchomieniu urządzenia.

  • Zadania z aktywatorami identyfikatora URI treści są teraz zachowywane również po ponownym uruchomieniu. b/80234744

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

  • Naprawiono awarię podczas ponownego dodawania do kolejki elementu WorkRequest. b/109572353.

  • Naprawiliśmy ostrzeżenia kompilatora Kotlin podczas korzystania z zależności work-runtime-ktx.

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

Zmiany w interfejsie API

  • Dodano synchroniczną wersję systemu WorkContinuation.getStatuses() getStatusesSync().
  • Worker potrafi odróżnić anulowanie inicjowane przez użytkownika od tymczasowego zatrzymania na żądanie systemu operacyjnego. Worker.isStopped() zwraca wartość true, jeśli przesłano żądanie postoju. Worker.isCancelled() zwraca wartość true, gdy zadanie zostało wyraźnie anulowane. b/79632247
  • Dodano obsługę JobParameters#getNetwork() w interfejsie API 28. Ta reklama jest widoczna w aplikacji Worker.getNetwork().
  • Dodano dyrektywę Configuration.Builder.setMaxSchedulerLimit(int maxSchedulerLimit), aby umożliwić Ci wymuszenie wysyłania liczby zadań do wysyłania do JobScheduler lub AlarmManager. Dzięki temu WorkManager nie zajmie wszystkich dostępnych JobScheduler miejsc.
  • Dodano funkcję Configuration.setJobSchedulerJobIdRange(int minJobSchedulerId, int maxJobSchedulerId), która pomaga zdefiniować zakres identyfikatorów zadań JobScheduler, których WorkManager może używać. b/79996760
  • Worker.getRunAttemptCount() zwraca bieżącą liczbę uruchomień dla danego parametru Worker. B/79716516
  • WorkManager.enqueueUniquePeriodicWork(String uniqueWorkName, ExistingPeriodicWorkPolicy existingPeriodicWorkPolicy, PeriodicWorkRequest periodicWork) umożliwia umieszczenie w kolejce unikalnych kluczy PeriodicWorkRequest. b/79600647
  • WorkManager.cancelAllWork() anuluje wszystkie Worker. Biblioteki zależne od WorkManager mogą wysyłać zapytania, gdy ta metoda została wywołana jako ostatnia, używając WorkManager.getLastCancelAllTimeMillis() w celu dodatkowego czyszczenia stanu wewnętrznego.
  • Dodano polecenie WorkManager.pruneWork(), aby usunąć ukończone zadania z wewnętrznej bazy danych. b/79950952, b/109710758

Zmiany w działaniu

  • Dodaliśmy niejawny tag do wszystkich elementów WorkRequest, który jest w pełni kwalifikowaną nazwą klasy na potrzeby klasy Worker. Ta opcja umożliwia usuwanie komponentów WorkRequest bez elementów tag lub gdy id jest niedostępny. b/109572351

Niezbędne zmiany

  • Nazwa elementu Worker.WorkerResult została zmieniona na Worker.Result.
  • Worker.onStopped ma teraz dodatkowy parametr isCancelled ustawiony na true, gdy zdarzenie Worker zostało bezpośrednio anulowane.

Wersja 1.0.0-alfa02

24 maja 2018 r.

Poprawki błędów

  • Poprawiono błąd NullPointerException w dniu State.isFinished(). B/79550068
  • Rozwiązaliśmy problem, który powodował, że harmonogram spotkań Worker został przełożony na Application.onCreate(). B/79660657
  • Rozwiązaliśmy problem, który powodował, że można było zaplanować więcej zadań niż jest to dozwolone w systemie operacyjnym. b/79497378
  • Przenieśliśmy czyszczenie blokad uśpienia powiązanych z urządzeniami Worker do wątku w tle.
  • Implementacja AlarmManager jest teraz prawidłowo czyszczona po zakończeniu wszystkich oczekujących zadań.
  • Usunięto problem z zapytaniami SQL czyszczenia, które wpływały na języki inne niż angielski. b/80065360
  • Dodano obsługę komponentów float w usłudze Data. b/79443878
  • Data.Builder.putAll() zwraca teraz wystąpienie Builder. b/79699162
  • Więcej plików javadoc i poprawek w dokumentacji. b/79691663

Zmiany w interfejsie API

  • Worker może zareagować na zatrzymanie. Worker.isStopped() może zostać użyty do sprawdzenia, czy Worker został zatrzymany. Worker.onStopped() może służyć do wykonywania prostych operacji czyszczenia.
  • Interfejs Worker.getTags() API zwraca Set tagów powiązanych z Worker.
  • Dodano przeciążenia (javax.time.Duration) w przypadku interfejsów API, które wymagają kombinacji czasu trwania i TimeUnit. Strzeżony przez @RequiresApi(26).
  • Rozszerzenia (WorkManager) zostały przeniesione z pakietu androidx.work.ktx do pakietu androidx.work. Stare rozszerzenia zostały wycofane i zostaną usunięte w przyszłej wersji.
  • Interfejs Configuration.withExecutor() został wycofany. Użyj w zamian zasady Configuration.setExecutor().

Wersja 1.0.0-alfa01

8 maja 2018 r.

Usługa WorkManager upraszcza planowanie i wykonywanie gwarantowanych zadań w tle z uwzględnieniem ograniczeń. Pierwsza wersja to 1.0.0-alpha01.