Menedżer roboczy

Interfejs WorkManager API ułatwia planowanie asynchronicznych zadań z możliwością odroczenia które muszą działać niezawodnie. Te interfejsy API pozwalają utworzyć zadanie i przekazać je do WorkManager ma być uruchamiany po spełnieniu ograniczeń pracy.
Najnowsza aktualizacja Wersja stabilna Kandydat do wydania Wersja Beta Wydanie alfa
7 sierpnia 2024 r. 2.9.1 - - 2.10.0-alfa02

Deklarowanie zależności

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

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

Odlotowe

dependencies {
    def work_version = "2.9.1"

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

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

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

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

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

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

Kotlin

dependencies {
    val work_version = "2.9.1"

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

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

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

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

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

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

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 odkryjesz nowe problemy jak ulepszyć tę bibliotekę. Przyjrzyj się istniejące problemy w tej bibliotece, zanim utworzysz nową. Możesz zagłosować nad istniejącym problemem przez klikając przycisk gwiazdki.

Tworzenie nowego numeru

Zobacz dokumentację narzędzia Issue Tracker. .

Wersja 2.10

Wersja 2.10.0-alfa02

17 kwietnia 2024 r.

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

Zmiany interfejsu API

  • Dodano możliwość wysyłania spanów logów czasu za pomocą konfigurowalnego @RestrictTo Tracer w WorkManager. (I17d7f, b/260214125)
  • Do elementu sterującego dyspozytorem dodano Configuration.workerCoroutineContext, gdzie wykonywane jest polecenie CoroutineWorker. Pomaga całkowicie unikać korzystania z Dispatchers.Default w WorkManager. (Icd1b7).
  • Dodaj niestandardowe moduły obsługi wyjątków dla instancji roboczych (Ib1b74, b/261190695)
  • OneTimeWorkRequest.Builder i PeriodicWorkRequest.Builder można teraz tworzyć za pomocą KClass zamiast Class: val request = OneTimeWorkRequest.Builder(Worker::class).setConstraints(...).build() (Ib55f6)
  • WorkManager zajęcia zostały przeniesione do Kotlin. Obecnie metody, które zwracają wartości LiveData, ListenableFuture lub Flow, dostarczają prawidłowe informacje o dopuszczalności wartości null. Może wymagać wprowadzenia zmian w ustawieniach kodu źródłowego, jeśli założenia dotyczące wartości null w tym kodzie były nieprawidłowe. (If6757).

Wersja 2.10.0-alpha01

24 stycznia 2024 r.

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

Nowe funkcje

  • Deweloperzy mogą określić NetworkRequest jako ograniczenie dla instancji roboczej za pomocą metody Constraints.setRequiredNetworkRequest. Pozwala to dokładniej kontrolować sieć, w której powinna działać instancja robocza.

Zmiany interfejsu API

  • Dodano możliwość określenia „NetworkRequest” jako ograniczenia. (Id98a1, b/280634452)

Wersja 2.9

Wersja 2.9.1

7 sierpnia 2024 r.

Usługa androidx.work:work-*:2.9.1 została zwolniona. Wersja 2.9.1 zawiera te zatwierdzenia.

Poprawki błędów

  • Naprawiono awarię, która spowodowała, że usługa WorkManager próbowała ponownie uruchomić długo działającą instancję roboczą (tj. instancję roboczą na pierwszym planie), gdy działanie na pierwszym planie miało unieważnione uprawnienia wstępne Androida 14. (b/333957914)

Wersja 2.9.0

29 listopada 2023 r.

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

Ważne zmiany wprowadzone od wersji 2.8.0

  • Dostrzegalność w zakresie Flow s. Postępy instancji roboczej można teraz obserwować za pomocą narzędzia Flow, WorkManager.getWorkInfosFlow i podobnych metod, a nie LiveData.
  • Teraz WorkManager podaje wskazówkę, dlaczego instancja robocza została wcześniej zatrzymana. Zapytanie może zostać wysłane przez instancję roboczą za pomocą metody getStopReason() lub z WorkInfo za pomocą getStopReason().
  • Dokładne harmonogramy pracowników okresowych przez setNextScheduleTimeOverride. Umożliwia to dynamiczne obliczanie następnego okresowego harmonogramu pracy, za pomocą którego można wdrożyć funkcje zaawansowane, takie jak adaptacyjne okresy odświeżania, niestandardowe ponawianie prób lub uruchamianie procesu roboczego kanału wiadomości, zanim użytkownik obudzi się codziennie rano, bez konieczności dryfu. Z tych technik należy korzystać w odniesieniu do ExistingPeriodicWorkPolicy.UPDATE, aby uniknąć anulowania obecnie uruchomionej instancji roboczej podczas planowania kolejnej.
  • Testowanie w usłudze WorkManager z produkcją dopasowującą wątki. Funkcji ExecutorsMode.PRESERVE_EXECUTORS można używać w narzędziu initializeTestWorkManager, aby zachować wykonawców określonych w obiekcie Configuration i używać prawdziwego wątku głównego.
  • Interfejsy API Coroutines, takie jak CoroutineWorker, zostały przeniesione z dodatkowego artefaktu „Work-runtime-ktx” do głównego środowiska wykonawczego roboczego artefaktu. Plik Work-runtime-ktx jest teraz pusty.

Zmiany interfejsu API

  • Element stopReason został dodany do playlisty WorkInfo. Udostępnia stopReason po uruchomieniu instancji roboczej. Może się to przydać w raportowaniu stopReason w użyteczny sposób, ponieważ zatrzymanie pracownika może prowadzić do bardzo szybkiego zakończenia działania aplikacji. (I21386)
  • Zezwalaj na ustawienie opcji Clock w konfiguracji i używanie jej do sekwencjonowania 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 o wycieku zasobów. (Ia8d49).
  • Konstruktor WorkInfo jest teraz publiczny, co może być przydatne podczas testowania. (Ia00b6, b/209145335)
  • Plik work-runtime-ktx jest teraz pusty, a CoroutineWorker i inne narzędzia specyficzne dla Kotlin są teraz dostępne w głównym artefaktie środowiska wykonawczego. (I71a9a)
  • Dodano metodę setNextScheduleTimeOverride, która umożliwia dokładne ustawienie okresowych harmonogramów pracy (I3b4da)
  • Dodano getNextScheduleTimeMillis w celu uzyskania informacji o zaplanowanym czasie uruchomienia do WorkInfo. (I797e4)
  • Informacje o początkowym opóźnieniu i okresowości są dodawane do kolumny WorkInfo. (I52f2f)
  • Dodano obserwację instancji roboczych za pomocą przepływów z użyciem metod getWorkInfosByTagFlow, getWorkInfoByIdFlow, getWorkInfosForUniqueWorkFlow, getWorkInfosFlow (If122a)
  • Do aplikacji „Constraints” dodano brakujące adnotacje (@RequiresApi(...)) konstruktory i właściwości. Są one teraz dostosowane do odpowiednich adnotacji dotyczących zbiórek w języku: Constraints.Builder, które istniały we wczesnych wersjach pakietu WorkManager. (I6d7d2)
  • WorkManager ma teraz osobny limit dla instancji roboczych identyfikatora treści, aby zapewnić im gwarantowane przedziały w regionie JobScheduler. Pozwala to uniknąć brakujących aktualizacji treści przy dużym obciążeniu. Limit można skonfigurować w Configuration.Builder.setContentUriTriggerWorkersLimit. (IC128f).
  • Do elementu WorkInfo dodano ograniczenia. (I162C0)

Wersja 2.9.0-rc01

18 października 2023 r.

Usługa 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.

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

Zmiany interfejsu API

Wersja 2.9.0-alpha02

26 lipca 2023 r.

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

Nowe funkcje

  • Teraz WorkManager podaje wskazówkę, dlaczego instancja robocza została wcześniej zatrzymana. Zapytanie może zostać wysłane przez instancję roboczą za pomocą metody getStopReason() lub z WorkInfo za pomocą getStopReason().

Zmiany interfejsu API

  • Element stopReason został dodany do playlisty WorkInfo. Udostępnia stopReason po uruchomieniu instancji roboczej. Może się to przydać w raportowaniu stopReason, ponieważ zatrzymanie pracownika może prowadzić do bardzo szybkiego wyłączenia aplikacji. (I21386)
  • Zezwalaj na ustawianie zegara w konfiguracji i używanie ich do sekwencjonowania 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 o wycieku zasobów. (Ia8d49).

Poprawki błędów

  • Dodano możliwość omijania overrideNextScheduleTime przy użyciu TestDriver i rozwiązaliśmy problemy z testowalnością. (IC2905).

Wersja 2.9.0-alpha01

7 czerwca 2023 r.

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

Nowe funkcje

  • Dostrzegalność w zakresie Flow s. Postępy instancji roboczej można teraz obserwować za pomocą narzędzia Flow, WorkManager.getWorkInfosFlow i podobnych metod, a nie LiveData.
  • Dokładne harmonogramy pracowników okresowych przez setNextScheduleTimeOverride. Umożliwia to dynamiczne obliczanie następnego okresowego harmonogramu pracy, za pomocą którego można wdrożyć funkcje zaawansowane, takie jak adaptacyjne okresy odświeżania, niestandardowe ponawianie prób lub uruchamianie procesu roboczego kanału wiadomości, zanim użytkownik obudzi się codziennie rano, bez konieczności dryfu. Z tych technik należy używać ExistingPeriodicWorkPolicy.UPDATE, aby uniknąć anulowania obecnie uruchomionej instancji roboczej podczas planowania kolejnej.
  • WorkManager przeprowadza testy w środowisku produkcyjnym do dopasowywania wątków. Za pomocą zasady ExecutorsMode.PRESERVE_EXECUTORS można zachować wykonawców określonych w elemencie Configuration i używać prawdziwego wątku głównego.
  • Interfejsy API Coroutines, 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 interfejsu API

  • Konstruktor WorkInfo jest teraz publiczny, co może być przydatne podczas testowania. (Ia00b6, b/209145335)
  • Element work-runtime-ktx jest teraz pusty. W głównym artefaktie work-runtime dostępne są teraz narzędzia CoroutineWorker oraz inne narzędzia związane z kotlinami. (I71a9a)
  • Dodano metodę setNextScheduleTimeOverride, która umożliwia dokładne ustawienie okresowych harmonogramów pracy (I3b4da)
  • Nazwa getEarliestRunTimeMillis została zmieniona na getNextScheduleTimeMillis. (I2bd7a).
  • Informacje o następnym zaplanowanym uruchomieniu zostaną dodane do zasady WorkInfo. (I797e4)
  • Informacje o początkowym opóźnieniu i okresowości są dodawane do kolumny WorkInfo. (I52f2f)
  • Dodano obserwację instancji roboczych za pomocą przepływów z użyciem metod getWorkInfosByTagFlow, getWorkInfoByIdFlow, getWorkInfosForUniqueWorkFlow, getWorkInfosFlow (If122a)
  • Dodano brakujące adnotacje (@RequiresApi(...)) do sekcji Ograniczenia konstruktory i właściwości. Są one teraz dostosowane do odpowiednich adnotacji dotyczących zbiórek w języku: Constraints.Builder, które istniały we wczesnych wersjach pakietu WorkManager. (I6d7d2)
  • WorkManager ma teraz osobny limit dla instancji roboczych identyfikatora treści, aby zapewnić im gwarantowane przedziały w regionie JobScheduler. Pozwala to uniknąć brakujących aktualizacji treści przy dużym obciążeniu. Limit można skonfigurować w Configuration.Builder.setContentUriTriggerWorkersLimit. (IC128f).
  • Do elementu WorkInfo dodano ograniczenia. (I162C0)

Wersja 2.8

Wersja 2.8.1

22 marca 2023 r.

Usługa 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 regionie RescheduleReceiver, który wcześniej nie obsługiwał prawidłowo 2 transmisji jednocześnie. (b/236906724)

Wersja 2.8.0

8 lutego 2023 r.

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

Ważne zmiany wprowadzone od wersji 2.7.0

Nowe funkcje

Zmiany interfejsu API

  • Element WorkManager.updateWork został dodany do aktualizacji zadania 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 pod nazwą. Jest podobny do istniejącego REPLACE, ale jest mniej uciążliwy: nie anuluje instancji roboczej, jeśli jest obecnie uruchomiona, i zachowuje czas kolejki. Początkowe opóźnienie i okres są obliczane na podstawie pierwotnego czasu umieszczenia w kolejce, a nie czasu aktualizacji. Interfejs REPLACE został wycofany, aby nie pomylić nazwy REPLACE i UPDATE. Jeśli chcesz zachować poprzednią semantykę właściwości REPLACE, możesz użyć nowo dodanego elementu CANCEL_AND_REENQUEUE, który jest taki sam jak REPLACE. (I985ed, b/219446409)
  • Dodano możliwość przechwytywania wyjątków od harmonogramu przez wywołanie funkcji Consumer<Throwable> przez setSchedulingExceptionHandler.
  • Dodaliśmy możliwość podawania zasady Consumer<Throwable> za pomocą metody setInitializationExceptionHandler w celu określenia, czy podczas próby zainicjowania WorkManagera wystąpiły problemy.
  • Wbudowane pomocnicze funkcje OneTimeWorkRequest i Przeniesiono użytkownika PeriodicWorkRequest z: androidx.work:work-runtime-ktx do: androidx.work:work-runtime (I0010f, b/209145335)
  • Dodano metody pomocnicze WorkQuery.fromIds, WorkQuery.fromStates, WorkQuery.fromUniqueWorkNames i WorkQuery.fromTags, aby bezpośrednio utworzyć metodę WorkQuery. (b/199919736) (If48f2, b/199919736)
  • Dodano getForegroundInfo do listy Worker. (Ic1ead).
  • RxWorker zarówno w przypadku RxJava 2, jak i RxJava 3 zwraca teraz setForeground zwracającą wartość Completable, której można użyć zamiast setForegroundInfoAsync, która zwraca ListenableFuture.
  • RxWorker zarówno dla RxJava 2, jak i RxJava 3, getForegroundInfo zwraca funkcję Single, której można użyć zamiast getForegroundInfoAsync, która zwraca ListenableFuture. (b/203851459)
  • Ograniczenia można teraz tworzyć bezpośrednio, zamiast korzystać z metody Constraints.Builder, co jest wygodne dla użytkowników Kotlin. (Idc390, b/137568653)
  • Dodano możliwość sprawdzania, czy WorkManager został zainicjowany. Oprócz tego dodaliśmy nowy interfejs API getConfiguration() dla programistów bibliotek, aby uzyskać konfigurację, za pomocą której zainicjowano WorkManager. (I6eff3, b/212300336)

Poprawki błędów

  • Rozwiązaliśmy problem z chwytliwym algorytmem szeregowania, który uniemożliwiał uruchamianie instancji roboczych natychmiast po obciążeniu. (I9686b, b/248111307)
  • Dodano @RequiresPermission do interfejsów API, które wymagają przyznania uprawnień POST_NOTIFICATIONS w pakiecie SDK 33 i nowszych. (IE542e, b/238790278)
  • Przenoszenie anulowań w CoroutineScope do ListenableFuture podczas korzystania z suspendCancellableCoroutine.

Wersja 2.8.0-rc01

7 grudnia 2022 r.

Usługa 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 różnica w wersji

Wersja 2.8.0-beta02

9 listopada 2022 r.

Usługa 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.

Usługa 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 chwytliwym algorytmem szeregowania, który uniemożliwiał uruchamianie instancji roboczych natychmiast po obciążeniu. (I9686b, b/248111307)

Wersja 2.8.0-alpha04

7 września 2022 roku

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

Zmiany interfejsu API

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

Wersja 2.8.0-alfa03

10 sierpnia 2022 r.

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

Nowe funkcje

  • Dodaliśmy możliwość aktualizowania aplikacji WorkRequests w nienachalny sposób z zachowaniem pierwotnego czasu umieszczenia w kolejce, łańcuchem konfiguracji itp. Więcej informacji znajdziesz na stronach WorkManager.updateWork i ExistingPeriodicWorkPolicy.UPDATE.

Zmiany interfejsu API

  • Element WorkManager.updateWork został dodany do aktualizacji zadania 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 pod nazwą. Jest podobny do istniejącego REPLACE, ale jest mniej uciążliwy: nie anuluje instancji roboczej, jeśli jest obecnie uruchomiona, i zachowuje czas kolejki. Początkowe opóźnienie i okres są obliczane na podstawie pierwotnego czasu umieszczenia w kolejce, a nie czasu aktualizacji. Interfejs REPLACE został wycofany, aby nie pomylić nazwy REPLACE i UPDATE. Jeśli chcesz zachować poprzednią semantykę właściwości REPLACE, możesz użyć nowo dodanego elementu CANCEL_AND_REENQUEUE, który jest taki sam jak REPLACE. (I985ed, b/219446409)
  • Aby dodać możliwość przechwytywania wyjątków od harmonogramu, zdefiniuj SchedulingExceptionHandler. (I033eb)
  • Wbudowane pomocnicze funkcje OneTimeWorkRequest i Przeniesiono użytkownika PeriodicWorkRequest 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 uprawnień POST_notificationS w pakiecie SDK 33 i nowszych. (IE542e, b/238790278)

Wersja 2.8.0-alpha02

6 kwietnia 2022 roku

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

Zmiany interfejsu API

  • Ograniczenia można teraz tworzyć bezpośrednio, zamiast korzystać z narzędzia Builder, co jest wygodne dla użytkowników Kotlin. (Idc390, b/137568653)
  • Dodano możliwość sprawdzania, czy WorkManager został zainicjowany. Oprócz tego dodaliśmy nowy interfejs API getConfiguration() dla programistów bibliotek, aby uzyskać konfigurację, za pomocą której zainicjowano WorkManager. (I6eff3, b/212300336)

Wersja 2.8.0-alpha01

12 stycznia 2022 r.

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

Zmiany interfejsu API

  • Metody pomocnicze WorkQuery.fromStates, WorkQuery.fromUniqueWorkNames, Dodano interfejsy WorkQuery.fromTags, aby bezpośrednio tworzyć zapytania WorkQuery. (If48f2, b/199919736)
  • Dodaje eksperymentalne metody BuildCompat dla przyszłych pakietów SDK (Iafd82, b/207528937)
  • Dodaj getForegroundInfo do Worker. (Ic1ead).
  • Metody pomocnicze WorkQuery.fromIds umożliwiające tworzenie zapytań WorkQuery bezpośrednio na podstawie identyfikatorów dodano. (Ie5bdf, b/199919736)
  • RxWorker ma teraz wartość setForeground zwracającą Completable może zostać użyta zamiast setForegroundInfoAsync, która zwraca ListenableFuture (I85156)
  • RxWorker dla RxJava 2 ma teraz getForegroundInfo zwracający Single, który może zostać użyta zamiast getForegroundInfoAsync, która zwraca ListenableFuture (I21c91, b/203851459)
  • RxWorker dla RxJava 3 zwraca teraz getForegroundInfo wartość Single, może zostać użyta zamiast getForegroundInfoAsync, która zwraca ListenableFuture (I1ca8a).
  • RxWorker ma teraz wartość setForeground zwracającą Completable może zostać użyta zamiast setForegroundInfoAsync, która zwraca ListenableFuture (I992a3, b/203851459)

Poprawki błędów

  • Przenoszenie anulowań w CoroutineScope do ListenableFuture podczas korzystania z suspendCancellableCoroutine. (I77e63)

Wersja 2.7

Wersja 2.7.1

17 listopada 2021 r.

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

Poprawki błędów

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

Wersja 2.7.0

13 października 2021 r.

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

Ważne zmiany wprowadzone od wersji 2.6.0

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

  • Gdy używasz interfejsu setExpedited(...), WorkManager przekazuje do przyspieszonego wykonywania zadań w Jobawce od Androida 12, jednocześnie zapewniając zgodność wsteczną z wcześniejszymi wersjami Androida przez przekazywanie dostępu do usługi działającej na pierwszym planie.

Wersja 2.7.0-rc01

29 września 2021 r.

Usługa 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

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

Nowe funkcje

  • Ogranicz rywalizację o wiele procesów SQLite podczas inicjowania WorkManagera.

Zmiany interfejsu API

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

Poprawki błędów

  • Wyświetlaj lepszy komunikat o błędzie dla przyspieszonego wdrożenia, które nie stosują getForegroundInfoAsync(). (Aosp/1809376).

Wersja 2.7.0-alpha05

21 lipca 2021 r.

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

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

Wersja 2.7.0-alpha04

2 czerwca 2021 r.

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

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

Zmiany interfejsu API

  • Interfejs ListenableWorker.setForegroundAsync() nie jest już wycofany.
  • W miarę możliwości zalecamy korzystanie z interfejsu API WorkRequest.Builder.setExpedited(...). Aby lepiej rozwiązać problemy, w których aplikacja nie podlega ograniczeniom usług na pierwszym planie, deweloperzy mogą używać interfejsu API ListenableWorker.setForegroundAsync().
  • Jeśli wywołana jest zasada ListenableWorker.setForegroundAsync(), gdy aplikacja podlega ograniczeniom usługi na pierwszym planie, spowoduje to zgłoszenie ForegroundServiceStartNotAllowedException.

Poprawki błędów

  • Przełożone zadania przyspieszone nie są już przyspieszone. Stają się one standardowymi ofertami pracy.

Wersja 2.7.0-alpha03

21 kwietnia 2021 r.

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

Nowe funkcje

Zmiany interfejsu API

Wersja 2.7.0-alpha02

10 marca 2021 r.

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

Poprawki błędów

  • Aby rozwiązać problem z awarią podczas kierowania na Androida 12, określ zmienność funkcji PendingIntent jako jawną. (B/180884673)

Wersja 2.7.0-alpha01

18 lutego 2021 r.

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

Nowe funkcje

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

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

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

    Gdy używasz interfejsu setExpedited(...), WorkManager przekazuje do przyspieszonego wykonywania zadań w JobScheduler od Androida 12, jednocześnie zapewniając zgodność wsteczną z wcześniejszymi wersjami Androida przez przekazywanie dostępu do usług działających na pierwszym planie.

Zmiany interfejsu API

  • Dodaj obsługę przyspieszonego wdrożenia WorkRequest.

Wersja 2.6.0

Wersja 2.6.0

1 września 2021 roku

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

Ważne zmiany wprowadzone od wersji 2.5.0

  • WorkManager do inicjowania WorkManagera używa teraz androidx.startup. Jeśli do inicjowania WorkManagera używasz w przeszłości interfejsu tools:node="remove" ContentProvider, musisz zamiast tego 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.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 RemoteCoroutineWorker, który jest implementacją elementu RemoteListenableWorker, które można powiązać z procesem zdalnym. (I30578)

Wersja 2.6.0-rc01

4 sierpnia 2021 r.

Usługa 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.

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

Poprawki błędów

  • Powiązanie RemoteWorkManager jest teraz prawidłowo odłączone od zbioru danych RemoteWorkManagerService, co umożliwia prawidłowe wyczyszczenie reguły RemoteWorkManagerService. Aosp/1730694
  • Powiązanie RemoteListenableWorker jest teraz prawidłowo odłączone od zbioru danych RemoteWorkerService, co umożliwia prawidłowe wyczyszczenie reguły RemoteWorkerService. aosp/1743817
  • Aplikacja 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.

Usługa 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-alpha02

21 kwietnia 2021 r.

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

Nowe funkcje

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

  • Dodano element RemoteCoroutineWorker będący implementacją RemoteListenableWorker, która można powiązać z procesem zdalnym. (I30578)

Zmiany interfejsu API

  • Dodano obsługę ograniczenia sieci TEMPORARILY_UNMETERED. (I08d5e)
  • Obsługa wielu procesów roboczych dla instancji setProgressAsync(). (IB6d08)
  • Udostępnij plik WorkManagerInitializer publicznie, aby inne androidx.startup.Initializer mogły używać go jako zależności. (I5Ab11)

Wersja 2.6.0-alpha01

24 marca 2021 r.

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

Nowe funkcje

  • WorkManager używa teraz androidx.startup do inicjowania WorkManagera. Wcześniej za tę czynność odpowiadał użytkownik androidx.work.impl.WorkManagerInitializer. (Aosp/1608813).

    Jeśli użyto funkcji tools:node="remove", do inicjalizacji użyto elementu ContentProvider cykl życia przetwarzania w przeszłości, musisz zamiast tego 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 interfejsu API

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

Poprawki błędów

  • Dodaj obejście błędu OEM, który powoduje zgłaszanie żądania SecurityException przy korzystaniu z interfejsów API AlarmManager. (Aosp/1587518).

Wersja 2.5.0

Wersja 2.5.0

27 stycznia 2021 r.

Usługa 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 korzystających z wielu procesów. Zwiększa to wydajność dzięki ujednoliceniu planowania zadań roboczych w ramach jednego procesu.
    • Aby użyć funkcji work-multiprocess, zdefiniuj zależność: implementation "androidx.work:work-multiprocess:2.5.0"
    • Wskaż proces główny przy użyciu metody Configuration.Builder.setDefaultProcessName(String).
    • Jeśli używasz work-multiprocess, chcesz też używać RemoteWorkManagera do zarządzania zadaniami WorkRequest. RemoteWorkManager zawsze komunikuje się z wyznaczonym procesem. Algorytm szeregowania w procesie również działa w wyznaczonym procesie.
  • Czasami ActivityManager nie może utworzyć instancji JobService w celu uruchomienia zadania. Powoduje to, że bazowe zadanie jest dyskryminowane z powodu błędu platformy. WorkManager sprawdza teraz, czy w przypadku każdego elementu WorkRequest istnieją zadania tworzenia kopii zapasowych, gdy Application jest inicjowany przez uzgadnianie zadań. To znacznie zwiększa niezawodność wykonywania zadań. (b/172475041, Aosp/1489577)
  • WorkManager ogranicza przyrost bazy danych, skracając czas buforowania, który zdarzenia WorkRequest są śledzone po zakończeniu wykonywania WorkRequest. Wcześniej okres ten wynosił 7 dni. Został zmniejszony do 1 dnia + czas trwania keepResultsForAtLeast. (Aosp/1419708).
  • Aby ułatwić testowanie, TestListenableWorkerBuilder obsługuje teraz poprawioną klasę przedłużającą ListenableWorker. (Aosp/1443299, b/169787349)
  • Podczas korzystania z Androida Studio Arctic Fox możesz teraz korzystać z Inspektora WorkManager.

Wersja 2.5.0-rc01

13 stycznia 2021 r.

Usługa 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ł nieprawidłowe unieważnienie elementów getWorkInfosLiveData w przypadku korzystania z interfejsu API opartego na WorkQuery. (Aosp/1540566, b/173769028)
  • Naprawiono błąd polegający na tym, że w niektórych rzadkich przypadkach transakcje z bazy danych nie były oznaczane jako udane. Powoduje to problemy na niektórych urządzeniach Motorola. (Aosp/1535368, b/175944460)
  • Naprawiono błąd ignorowania elementów NoSuchElementException podczas próby usunięcia powiązania z martwym procesem. (Aosp/1530589).
  • Popraw działanie ConstraintTrackingWorker, tak aby ListenableWorker został zatrzymany tylko wtedy, gdy nie został jeszcze zatrzymany. (Aosp/1496844, b/172946965)
  • Zaktualizuj biblioteki androidx.work, aby kierować aplikacje na Javę 8 (Ibd2f2)

Wersja 2.5.0-beta02

Grudzień 2, 2020

Usługa 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 wątek wywołania podczas próby utworzenia powiązania z wyznaczonym procesem. (Aosp/1475538)
  • Naprawiliśmy błąd polegający na tym, że jednostki PeriodicWorkRequest nie były prawidłowo uzgadniane. (b/172475041, Aosp/1489577)
  • Dodaliśmy obejście błędu platformy występującego w przypadku 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.

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

Nowe funkcje

  • Funkcja WorkManager automatycznie ogranicza liczbę elementów WorkRequest, które mogą odebrać algorytm szeregowania procesu. Żądania są nadal wykonywane w kolejności FIFO. (Aosp/1455228)
  • WorkManager próbuje przywrócić dane, gdy magazyn danych aplikacji jest w złym stanie. (Aosp/1463103).

Poprawki błędów

  • Gdy sesje ListenableWorker zostaną przerwane, natychmiast oznacz je jako ENQUEUED, aby można było zmienić ich termin. (Aosp/1455618, b/170273988)

Wersja 2.5.0-alpha03

14 października 2020 r.

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

Zmiany interfejsu API

  • TestListenableWorkerBuilder i TestWorkerBuilder nie używają typów nieprzetworzonych. (I883ad, b/169787349)

Poprawki błędów

  • Użyj elementu ApplicationInfo, aby określić nazwę domyślnego procesu aplikacji. (b/168716641, Aosp/1429950)
  • Napraw reguły widoczności w regułach RemoteWorkManager i RemoteWorkContinuation. Te interfejsy API nie są już oznaczone jako @Restricted. (Aosp/1432091).
  • Napraw reguły ProGuard w przeglądarce :work:work-multiprocess. (Aosp/1432091).
  • Popraw cykle życia powiadomień w przypadku długo trwających zadań powiązanych z usługą na pierwszym planie. (b/168502234, Aosp/1431331)

Wersja 2.5.0-alpha02

16 września 2020 roku

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

Nowe funkcje

  • Dodaj do WorkQuery interfejs API, aby móc używać elementów id do wysyłania zapytań dotyczących obiektów WorkInfo. (Aosp/1412372, b/157335295)
  • WorkManager lepiej obsługuje aplikacje, które używają wielu procesów z nowym artefaktem (androidx.work:work-multiprocess:*). Ten nowy artefakt pomaga rozwiązać kilka problemów napotykanych przez duże aplikacje, takich jak:
    • Zwykle należy inicjować WorkManagera w każdym procesie aplikacji. To nie jest dobry wynik, bo występuje zwiększona 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ą funkcji Configuration#setDefaultProcessName(processName). processName jest pełną i jednoznaczną nazwą procesu, która wygląda jak packageName:processName (np. com.example:remote).
    • Zestaw nowych interfejsów API: RemoteWorkManager i RemoteWorkContinuation do żądań roboczych enqueue, cancel i query. Te interfejsy API nie obejmują wariantów LiveData, aby uniknąć rywalizacji z SQLite między wieloma procesami. Wszystkie połączenia z numerami enqueue, cancel i query są przekazywane do procesu aplikacji primary przy użyciu AIDL i zwracają biegle ListenableFuture. (Aosp/1392657, aosp/1411210, aosp/1412215, Aosp/1417713)

Zmiany interfejsu API

  • WorkManager bardziej agresywnie przycina teraz ukończone WorkRequest, które nie mają niekompletnych zależności. Zmieniono czas buforowania z 7 dni na 1 dzień. (Aosp/1419708).

Poprawki błędów

  • Teraz WorkManager aktywnie uzgadnia zadania, więc zadania WorkRequest i JobScheduler są zsynchronizowane po zainicjowaniu WorkManager. (aosp/1412794, b/166292069)

Wersja 2.5.0-alpha01

19 sierpnia 2020 r.

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

Nowe funkcje

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

Poprawki błędów

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

Treści tłumaczone przez użytkowników zewnętrznych

  • Naprawiono dokumentację dotyczącą ArrayCreatingInputMerger według Zac Sweers (github/43).

Wersja 2.4.0

Wersja 2.4.0

22 lipca 2020 r.

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

Ważne zmiany od wersji 2.3.0

  • Stosowany w procesie algorytm szeregowania WorkManager ma teraz większe możliwości. Wcześniej w procesie Scheduler uwzględniany był tylko sposób wykonania prac, które nie były opóźnione i których ograniczenia zostały spełnione. Obecnie algorytm szeregowania procesu śledzi żądania WorkRequest, które mogą być wykonywane w przyszłości, w tym PeriodicWorkRequests. W procesie Scheduler też nie obowiązują limity planowania (ale nadal ogranicza się do rozmiaru obiektu 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ć wykonywaniem opóźnionych zadań na pierwszym planie, WorkManager wprowadza też nową konfigurowalną pracę RunnableScheduler. (Aosp/1185778).
  • WorkManager obsługuje teraz RxJava 3. Aby używać środowiska 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 elementów WorkInfo za pomocą interfejsu WorkQuery. Jest to przydatne, gdy deweloperzy chcą wysyłać zapytania do komponentów WorkInfo za pomocą kombinacji kilku atrybutów. Więcej informacji znajdziesz tutaj: WorkQuery.Builder.fromStates(...), WorkQuery.Builder. fromTags(...) lub 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 w nim wiele przydatnych informacji, m.in.:

    • Żądania robocze, które zostały ukończone w ciągu ostatnich 24 godzin.
    • Żądania WorkRequests, które są obecnie URUCHOMIONE.
    • Zaplanowane żądania pracy. (Aosp/1235501).
  • Dodaj komponent ExistingWorkPolicy.APPEND_OR_REPLACE podobny do APPEND, ale zastępuje sieć, która anulowała lub nie spełniła wymagań wstępnych. (b/134613984, Aosp/1199640)

  • Umożliwia dodanie niestandardowego obiektu RunnableScheduler w celu śledzenia żądań WorkRequest, które będą wykonywane w przyszłości. Jest ona używana przez algorytm szeregowania w procesie. (Aosp/1203944).

  • Dodano obsługę dynamicznego dodawania fabryk, do których mają być przekazywane zadania w przypadku użycia funkcji DelegatingWorkerFactory. (b/156289105, Aosp/1309745).

  • Dokładniej dopasuj śledzenie ograniczeń 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, które korzystają z wielu procesów. (Aosp/1324732).

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

    • Użycie właściwego atrybutu foregroundServiceType przy korzystaniu z interfejsów API setForegroundAsync(). (b/147873061, Aosp/1215915)
    • Określenie identyfikatorów JobScheduler, których WorkManager ma używać przy bezpośrednim korzystaniu z interfejsów JobService API. Aosp/1223567
    • Dodaliśmy nową regułę lintowania, która sprawi, że ListenableWorkerwdrożenia mają teraz wartość public, jeśli używana jest domyślna wartość WorkerFactory. (Aosp/1291262).
  • Połączenia z numerem setForegroundAsync(), które nie zostaną ukończone przed ukończeniem ListenableWorker, będą teraz sygnalizowane przez IllegalStateException na zwróconym urządzeniu ListenableFuture. (Aosp/1262743).

  • Napraw błąd, który powodował, że działanie elementu ForegroundService nie było zatrzymywane po przerwaniu działania Worker na pierwszym planie. (b/155579898, Aosp/1302153)

  • Naprawiono błąd, przez który WorkManager próbuje uruchomić wiele wystąpień elementu Worker powiązanego z usługą działającą na pierwszym planie (b/156310133, Aosp/1309853)

Wersja 2.4.0-rc01

24 czerwca 2020 r.

Usługa 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.

Udostępniono 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

  • Napraw błąd, który powodował, że działanie elementu ForegroundService nie było zatrzymywane po przerwaniu działania Worker na pierwszym planie. (b/155579898, Aosp/1302153)
  • Naprawiono błąd polegający na tym, że WorkManager próbuje wykonać wiele wystąpień elementu Worker powiązanego z usługą działającą na pierwszym planie (b/156310133, aosp/1309853)
  • Dodano obsługę dynamicznego dodawania fabryk, do których mają być przekazywane zadania w przypadku użycia funkcji DelegatingWorkerFactory. (b/156289105, Aosp/1309745)
  • Dokładniej dopasuj śledzenie ograniczeń BATTERY_NOT_LOW do platformy. (Aosp/1312583).

Wersja 2.4.0-alpha03

29 kwietnia 2020 roku

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

Nowe funkcje

  • WorkManager obsługuje teraz RxJava 3. Aby używać środowiska 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 sprawi, że ListenableWorkerwdrożenia mają teraz wartość public, jeśli używana jest domyślna wartość WorkerFactory. (Aosp/1291262).

Zmiany interfejsu API

  • Wywołanie setProgressAsync() po zakończeniu wykonywania polecenia ListenableWorker spowoduje teraz sygnał Exception przez ListenableFuture. (Aosp/1285494).
  • WorkQuery.Builder ma teraz oznaczenie final. (Aosp/1275037).
  • Metody fabryki WorkQuery.Builder withStates, withTags i withUniqueWorkNames zostały zmienione odpowiednio na fromStates, fromTags i fromUniqueWorkNames. (Aosp/1280287).

Poprawki błędów

Wersja 2.4.0-alpha02

Kwiecień 1, 2020

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

Nowe funkcje

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

Zmiany interfejsu API

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

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

Poprawki błędów

  • Naprawiono regułę lintowania, która sprawdza nieprawidłowe czasy trwania interwałów dla PeriodicWorkRequest s. (aosp/1254846, b/152606442)

Wersja 2.4.0-alpha01

Marzec 4, 2020

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

Nowe funkcje

  • Stosowany w procesie algorytm szeregowania WorkManager ma teraz większe możliwości. Wcześniej algorytm szeregowania procesu uwzględniał tylko wykonywanie tych zadań, które nie były opóźnione i których ograniczenia zostały spełnione. Obecnie algorytm szeregowania procesu śledzi zdarzenia WorkRequest, które mogą być wykonywane w przyszłości, w tym elementy PeriodicWorkRequest. Algorytm szeregowania w procesie nie też przekracza limitów planowania (ale nadal ogranicza się do rozmiaru obiektu Executor używanego przez WorkManagera). Oznacza to, że aplikacja może teraz wykonywać znacznie więcej poleceń WorkRequest, gdy działa na pierwszym planie. (Aosp/1185778)

  • Dodano możliwość żądania informacji diagnostycznych od WorkManager za pomocą interfejsu adb shell am broadcast -a "androidx.work.diagnostics.REQUEST_DIAGNOSTICS" -p "<your_app_package_name>". Znajdziesz w nim wiele przydatnych informacji, m.in.:

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

    • Użycie właściwego atrybutu foregroundServiceType przy korzystaniu z interfejsów API setForegroundAsync(). (b/147873061, Aosp/1215915)
    • Określam identyfikatory JobScheduler, których WorkManager ma używać bezpośrednio przy korzystaniu z interfejsów API JobService. (Aosp/1223567).

Zmiany interfejsu API

  • Dodaj sieć ExistingWorkPolicy.APPEND_OR_REPLACE podobną do APPEND, która jednak zastępuje sieć, która nie spełniła warunków wstępnych lub została anulowana. (b/134613984, Aosp/1199640).

  • Możliwość dodania niestandardowego obiektu RunnableScheduler w celu śledzenia elementów WorkRequest, które będą musiały być wykonywane w przyszłości. Jest ona używana przez algorytm szeregowania w procesie. (Aosp/1203944).

Poprawki błędów

  • Wycofano atrybut setProgress() w obiekcie RxWorker, ponieważ wcześniej zwracał on wartość Single<Void>, której typ jest niemożliwy. Dodano nowy interfejs API setCompletableProgress(), który zwraca wartość Completable. i dodaliśmy nowe reguły Lint, które pomogą w migracji do nowych interfejsów API. (b/150080946, Aosp/1242665).

Wersja 2.3.4

Wersja 2.3.4

18 marca 2020 r.

Usługa 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ługotrwałych elementów Worker po przekroczeniu 10-minutowego okna wykonywania. (Aosp/1247484, b/150553353)
  • Poprawiono lint usługi WorkManager IssueRegistry. Dziękujemy @ZacSweers z platformy Slack za Twoją pomoc. (Aosp/1217923).

Wersja 2.3.3

Wersja 2.3.3

Marzec 4, 2020

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

Poprawki błędów

  • Naprawiliśmy błąd, który powodował, że przerwanie wydarzenia Worker powodowało, że nie można było go prawidłowo przełożyć. (b/150325687, Aosp/1246571)

Wersja 2.3.2

Wersja 2.3.2

19 lutego 2020 r.

Zwolniono androidx.work:work-*:2.3.2. Wersja 2.3.2 zawiera te zatwierdzenia.

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował, że usługa WorkManager przekraczała limit 100 zadań w JobScheduler w rzadkich przypadkach. (Aosp/1226859, b/149092520)
  • Poprawiono warunek wyścigu w kontrolerach ConstraintControllers. (Aosp/1220100).
  • Skorygowano cykl życia usługi działającej na pierwszym planie dla długo działających procesów roboczych. (Aosp/1226295).
  • Ulepszono zarządzanie anulowaniem powiadomień dla długotrwałych pracowników po anulowaniu przez instancję roboczą. (Aosp/1228346).

Wersja 2.3.1

Wersja 2.3.1

5 lutego 2020 r.

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

Poprawki błędów.

  • Pozwala lepiej zarządzać cyklem życia elementów Notification w przypadku długotrwałych elementów Worker uruchamianych, gdy aktywny jest pierwszy plan Service. (Aosp/1218539, b/147249312)
  • WorkManager korzysta teraz ze stabilnej wersji androidx.sqlite:sqlite-framework:2.1.0. (Aosp/1217729)
  • Dodano reguły lintowania, aby zapewnić, że podczas korzystania z zasad foregroundServiceType w obiekcie ForegroundInfo w AndroidManifest.xml określono foregroundServiceType. (Aosp/1214207, b/147873061)

Wersja 2.3.0

Wersja 2.3.0

Styczeń 22, 2020

Usługa 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 wprowadzone od wersji 2.2.0

  • Pomoc w przypadku długotrwałych i ważnych prac dzięki ListenableWorker#setForegroundAsync().
  • Pomoc dotycząca postępów pracowników w usłudze ListenableWorker#setProgressAsync().
  • WorkManager dodaje teraz do biblioteki dodatkowe reguły lintowania, co ułatwia wczesne wykrywanie błędów.

Wersja 2.3.0-rc01

Styczeń 8, 2020

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

Ta wersja jest taka sama jak 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.

Usługa 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 w przypadku niemożliwych do odzyskania wyjątków SQLite. (Aosp/1185777)
  • Dodano regułę lintowania, która powoduje, że dostawca treści androidx.work.impl.WorkManagerInitializer jest usuwany z AndroidManifest.xml podczas inicjowania na żądanie. (Aosp/1167007).
  • Dodano ostrzeżenie o lintowaniu, gdy zasada enqueue() jest używana dla PeriodicWorkRequest zamiast enqueueUniquePeriodicWork(). (Aosp/1166032).

Zmiany interfejsu API

  • ForegroundInfo wymaga teraz określenia notificationId, które ma być używane podczas korzystania z ListenableWorker.setForegroundAsync(). To niezwykła zmiana. Dzięki temu możesz równolegle uruchamiać wiele długotrwałych elementów Worker. WorkManager lepiej zarządza też cyklem życia podanych elementów Notification. (b/145473554, aosp/1181208, asop/1181216, asop/1183577)

Poprawki błędów.

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

Zmiany zależności

  • WorkManager używa teraz pokoju 2.2.2.

Wersja 2.3.0-beta01

20 listopada 2019 r.

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

Nowe funkcje

  • Dodano nową regułę lintowania, która zapobiega błędom programistycznym wynikającym z nieprawidłowej implementacji funkcji androidx.work.Configuration.Provider podczas korzystania z inicjowania na żądanie. aosp/1164559

Wersja 2.3.0-alfa03

23 października 2019 r.

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

Nowe funkcje

  • Dodano interfejs API WorkManager.createCancelPendingIntent(), który ułatwia anulowanie elementów WorkRequest bez konieczności rejestrowania innego komponentu w interfejsie AndroidManifest.xml. Ten interfejs API szczególnie ułatwia anulowanie subskrypcji WorkRequest w Notification. Zamierzamy połączyć to rozwiązanie z nowymi interfejsami API działającymi na pierwszym planie w wersji 2.3.0.
  • WorkManager korzysta teraz ze stabilnej wersji androidx.room:*:2.2.0.

Zmiany interfejsu API

  • Zmieniliśmy nazwę ForegroundInfo.getNotificationType() 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 przez niepotrzebne wywołanie setTransactionSuccessful() poza transakcją. Dotyczy to rzadkich migracji. (b/142580433, Aosp/1141737)

Wersja 2.3.0-alfa02

9 października 2019 r.

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

Nowe funkcje

  • WorkManager obsługuje teraz trwające lub ważne zadania, które powinny pozostać aktywne przez system operacyjny. Więcej informacji znajdziesz na stronie ListenableWorker#setForegroundAsync() (lub CoroutineWorker#setForeground() w przypadku Kotlin). (Aosp/1133636).

Zmiany interfejsu API

  • Nazwa interfejsu API containsKey w języku Data została zmieniona na hasKeyWithValueOfType. Zmieniliśmy też nazwę odpowiedniej metody rozszerzenia w bibliotece ktx. (b/141916545)

Poprawki błędów.

  • Harmonogramy Work Manager działają sprawiedliwie, gdy liczba WorkRequest w kolejce zbliża się do limitów harmonogramu. (Aosp/1105766)
  • WorkManager wywołuje metodę ListenableWorker#onStopped() tylko wtedy, gdy dana praca nie została jeszcze ukończona. (B/140055777)
  • WorkManager usuwa teraz informacje o postępach, gdy instancja robocza zostanie przerwana lub osiągnie stan końcowy. (Aosp/1114572)
  • Firma Data jest teraz znacznie bardziej użytecznatoString()przedstawiana. (b/140945323)
  • Metoda Data ma teraz lepszą metodę equals(). Obsługuje również typ deepEquals w przypadku Array. (b/140922528)
  • WorkManager przechowuje teraz wewnętrzną bazę danych i pliki ustawień w katalogu bez kopii zapasowej. (b/114808216)

Wersja 2.3.0-alfa01

22 sierpnia 2019 r.

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

Nowe funkcje

  • ListenableWorker może teraz ustawiać postęp za pomocą interfejsu API setProgressAsync(). Dodano też odpowiedni interfejs API suspend-ing setProgress w tabeli CoroutineWorker oraz interfejs 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órego można użyć do sprawdzenia, czy dane wejściowe instancji Worker zawierają klucze o oczekiwanym typie. (b/117136838)
  • Pole Data może być teraz serializowane za pomocą atrybutów Data.toByteArray() i Data.fromByteArray(). Pamiętaj, że interfejs Data nie gwarantuje obsługi wersji, dlatego nie należy go zachowywać ani używać w przypadku protokołu IPC między aplikacjami. Można ich bezpiecznie używać tylko między różnymi procesami tej samej aplikacji.
  • Dodano możliwość określania InputMergerFactory za pomocą Configuration.setInputMergerFactory. (b/133273159)

Zmiany interfejsu API

  • WorkManager zgłosi instancję IllegalStateException, jeśli WorkerFactory zwróci instancję ListenableWorker, która została wcześniej wywołana. (b/139554406)
  • Aktualizujemy dokumentację dotyczącą anulowania ListenableFuture i wywołania zwrotnego onStopped() w ListenableWorker. (b/138413671)

Poprawki błędów.

  • W trakcie procesu algorytm szeregowania ignoruje teraz wywołania typu WorkRequest z ograniczeniem idle. Te żądania są teraz przetwarzane przez usługę JobScheduler, gdy urządzenie jest w rzeczywistości idle. (Aosp/1089779).
  • TestScheduler teraz prawidłowo używa podanego Executor jako wewnętrznego wykonawcy zadań w testach. (Aosp/1090749)

Wersja 2.2.0

Wersja 2.2.0

15 sierpnia 2019 r.

Usługa 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 od 2.1.0

androidx.work:work-gcm:2.2.0 to nowy artefakt Maven, który obsługuje użycie GCMNetworkManager jako algorytmu szeregowania, gdy Usługi Google Play są dostępne dla poziomów interfejsu API <= 22. Jest to zależność opcjonalna, 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 uzyskiwać pomoc dotyczącą GCMNetworkManager. Jeśli Usługi Google Play nie będą dostępne, na starszych urządzeniach w WorkManageru będzie można wrócić do AlarmManagera.

Wersja 2.2.0-rc01

30 lipca 2019 r.

Usługa 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 AlarmManager, który powodował przedwczesne wyłączanie usługi i kończenie się błędem RejectedExecutionException. (aosp/1092374) (b/138238197).
  • Dodano obejście problemu NullPointerException w przypadku korzystania z interfejsów API JobScheduler na niektórych urządzeniach. (aosp/1091020) (b/138364061), (b/138441699)

Wersja 2.2.0-beta02

19 lipca 2019 r.

Usługa 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ść jacoco w 2.2.0-beta01.

Wersja 2.2.0-beta01

17 lipca 2019 r.

Usługa 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 obsługuje użycie GCMNetworkManager jako algorytmu szeregowania, gdy Usługi Google Play są dostępne dla poziomów interfejsu API <= 22. Jest to opcjonalna zależność, która zwiększa 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 uzyskiwać pomoc dotyczącą GCMNetworkManager. Jeśli Usługi Google Play nie będą dostępne, na starszych urządzeniach w WorkManageru będzie można wrócić do AlarmManagera.

Poprawki błędów.

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

Wersja 2.1.0

Wersja 2.1.0

11 lipca 2019 r.

Usługa 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 wprowadzone od wersji 2.0.1

  • work-runtime-ktx wymaga teraz środowiska Java 8. Jeśli napotkasz jakieś problemy, do build.gradle dodaj te elementy: kotlinOptions { jvmTarget = "1.8" }
  • Dodano inicjowanie na żądanie dla WorkManager, co spowoduje utworzenie WorkManagera tylko po odwołaniu. b/127497100 Aby skonfigurować projekt na potrzeby inicjowania na żądanie:
    1. Wyłącz automatyczne inicjator.
    2. Zaimplementuj Configuration.Provider w niestandardowym obiekcie Application.
    3. Zmień wszystkie odniesienia pliku WorkManager.getInstance() na WorkManager.getInstance(Context) W ramach tej zmiany wycofano dyrektywę WorkManager.getInstance(). Zawsze bezpieczniej jest zadzwonić do nowej WorkManager.getInstance(Context) – wymiana, nawet jeśli nie robisz inicjowania na żądanie.
  • PeriodicWorkRequest obsługują teraz początkowe opóźnienia. Za pomocą Metoda setInitialDelay w PeriodicWorkRequest.Builder, aby ustawić wartość początkową opóźnienia. b/111404867
  • Dodano możliwość przekazywania uprawnień do co najmniej 1 zarejestrowanego użytkownika WorkerFactory za pomocą DelegatingWorkerFactory b/131435993
  • Dodano możliwość dostosowywania funkcji Executor używanych przez WorkManager do całej wewnętrznej dokumentacji księgowej w ramach usługi Configuration.Builder.setTaskExecutor.
  • Dodano możliwość tworzenia elementów Worker i ListenableWorker dostępnych do testowania jednostkowego za pomocą funkcji TestWorkerBuilder i TestListenableWorkerBuilder w funkcji work-testing artefakt.
    • Zwróć uwagę, ż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 zmień maksymalny rozmiar Data obiektów.
  • WorkManager korzysta teraz z usługi Room 2.1.0, co powinno rozwiązać niektóre problemy z bazą danych.

Wersja 2.1.0-rc01

27 czerwca 2019 r.

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

Poprawki błędów.

  • Naprawiliśmy błąd, który powodował awarię aplikacji podczas wykonywania zadań przy użyciu funkcji JobScheduler podczas tworzenia kopii zapasowej b/135858602.

Wersja 2.1.0-beta02

20 czerwca 2019 r.

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

Poprawki błędów.

  • TestListenableWorkerBuilder używa teraz prawidłowej wartości WorkerFactory podczas tworzenia instancji ListenableWorker. b/135275844
  • Naprawiliśmy błąd, który powodował dryfy w okresach wykonania WorkRequest s z powodu śmierci procesu. b/135272196

Wersja 2.1.0-beta01

13 czerwca 2019 r.

Usługa 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, co powinno rozwiązać niektóre problemy z bazą danych.
  • Usunięto część wejścia-wyjścia dysku startowego w wątku głównym.
  • Naprawiono potencjalne zakleszczenie w śledzeniu ograniczeń. b/134361006
  • Zapobiegawcze anulowane nieprawidłowe zadania przypisane do WorkManagera. b/134058261
  • Do interfejsów API JobScheduler dodaliśmy wywołania defensywne związane z niewłaściwie działającymi urządzeniami.

Wersja 2.1.0-alfa03

5 czerwca 2019 r.

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

Poprawki błędów.

  • Ulepszona dokumentacja funkcji PeriodicWorkRequest.
  • WorkManagerTestInitHelper używa teraz na potrzeby testów odpowiedniego wykonawcy w tle.
  • Usunięto problemy z SQLite, które występowały podczas obsługi dużych transakcji na niektórych urządzeniach. (b/130182503)
  • Zależności WorkManagera są teraz bardziej szczegółowe. (b/133169148).
  • Podczas planowania zadań za pomocą WorkManager możesz obejść błędy OEM w implementacji JobScheduler.
  • Usprawnienia w algorytmie szeregowania opartego na AlarmManagera dotyczące okresów ważności usług, które wcześniej powodowały rzadkie awarie. (b/133313734)

Wersja 2.1.0-alfa02

16 maja 2019 r.

Udostępniono WorkManager 2.1.0-alpha02. Ta wersja zawiera kilka nowych interfejsów API.

Zmiany interfejsu API

  • PeriodicWorkRequest obsługują teraz początkowe opóźnienia. Za pomocą Metoda setInitialDelay w PeriodicWorkRequest.Builder, aby ustawić wartość początkową opóźnienia. b/111404867

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

  • Dodano możliwość dostosowywania funkcji Executor używanych przez WorkManager do całej wewnętrznej księgi rachunkowej w ramach usługi Configuration.Builder.setTaskExecutor.

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

Wersja 2.1.0-alpha01

24 kwietnia 2019 r.

Udostępniono WorkManager 2.1.0-alpha01. Ta wersja zawiera kilka nowych interfejsów API. Pamiętaj, że od tej wersji pojawią się nowe funkcje, nie zostanie przeniesiona do wersji 1.x. Zalecamy przejście na wersję 2.x.

Zmiany interfejsu API

  • Dodano inicjowanie na żądanie dla WorkManager, co spowoduje utworzenie WorkManagera tylko po odwołaniu. b/127497100 Aby skonfigurować projekt na potrzeby inicjowania na żądanie:
    1. Wyłącz automatyczne inicjator.
    2. Zaimplementuj Configuration.Provider w niestandardowym obiekcie Application.
    3. Zmień wszystkie odniesienia pliku WorkManager.getInstance() na WorkManager.getInstance(Context) W ramach tej zmiany wycofano dyrektywę WorkManager.getInstance(). Zawsze bezpieczniej jest zadzwonić do nowej WorkManager.getInstance(Context) – wymiana, nawet jeśli nie robisz inicjowania na żądanie.
  • Dodano możliwość tworzenia elementów Worker i ListenableWorker dostępnych do testowania jednostkowego za pomocą funkcji TestWorkerBuilder i TestListenableWorkerBuilder w funkcji work-testing artefakt.
    • Zwróć uwagę, że work-testing pobiera teraz Kotlin jako zależność, ale również 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 zmień maksymalny rozmiar Data obiektów.
  • Wycofano: CoroutineWorker.coroutineContext. To pole było nieprawidłowe wpisany jako CoroutineDispatcher; Nie jest już potrzebny, ponieważ możesz przejść do pożądany kontekst coroutineContext w treści funkcji zawieszającej.
  • RxWorker.createWork() i RxWorker.getBackgroundScheduler() są teraz z adnotacjami z zwracanymi typami @NonNull.

Wersja 2.0.1

Wersja 2.0.1

9 kwietnia 2019 r.

Udostępniono WorkManager 2.0.1. Ta wersja jest identyczna z 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. Dla: starszej wersji 1.x, niektóre z tych zmian 1.0.1-rc01.

Poprawki błędów

  • Testy Robolectric działają teraz prawidłowo w usłudze WorkManager. b/122553577
  • Usunięto problem awaryjny, który powodował, że śledzenie ograniczeń nie było czyszczone API typu pre-JobScheduler. b/129226383
  • Naprawiono błąd StackOverflowError dotyczący długich łańcuchów pracy. b/129091233
  • Zaktualizowaliśmy dokumentację dotyczącą PeriodicWorkRequest s, by wskazać, że czas elastyczny nieobsługiwany przez interfejs API 23.
  • Naprawiono niektóre uszkodzone linki w dokumentacji Kotlin.

Wersja 2.0.0

Wersja 2.0.0

20 marca 2019 r.

Udostępniono WorkManager 2.0.0. Ta wersja jest taka sama jak 2.0.0-rc01 i jest stabilna wersja AndroidaX 1.0.0 z zależnościami AndroidaX. Zalecamy kierowanych na tę wersję zamiast na starsze wersje 1.x. Wszystkie aktywne w wersji 2.x i 1.x będą poprawiać krytyczne błędy ograniczone czasowo.

Wersja 2.0.0-rc01

Marzec 7, 2019

Udostępniono WorkManager 2.0.0-rc01. Ta wersja jest identyczna ze stabilną wersją 1.0.0 ale ma zależności AndroidaX. Po osiągnięciu stabilnej wersji 2.0.0 do tej wersji, a starsze wersje 1.x otrzymają tylko poprawki błędów. Cały proces programowania jest kierowany na wersję 2.x.

Zależności sprzed AndroidaX

Informacje o korzystaniu z rozszerzeń Kotlin znajdziesz tutaj: Dokumentacja KTX.
Dokumenty referencyjne: Java

Odlotowe

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.

Udostępniono WorkManager 1.0.1. Ta wersja jest identyczna z 1.0.1-rc01.

Zdecydowanie zachęcamy użytkowników do przejścia na wersję WorkManager 2.x, że gałąź 1.x będzie wkrótce zawierać niewiele aktualizacji. Nowe interfejsy API nie są też udostępniane w bibliotece 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 w usłudze WorkManager. b/122553577
  • Usunięto problem awaryjny, który powodował, że śledzenie ograniczeń nie było czyszczone API typu pre-JobScheduler. b/129226383
  • Naprawiono błąd StackOverflowError dotyczący długich łańcuchów pracy. b/129091233

Wersja 1.0.0

Wersja 1.0.0

5 marca 2019 r.

To jest stabilna wersja WorkManager 1.0.0. Ta wersja WorkManagera jest identyczne jak 1.0.0-rc02.

Wersja 1.0.0-rc02

21 lutego 2019 r.

To jest druga wersja kandydująca do stabilnej wersji 1.0.0 usługi WorkManager. Ta wersja zawiera 2 poprawki błędów.

Poprawki błędów

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

  • Elementy typu Worker, które rzucają niezaznaczone pole Exception, są teraz prawidłowo oznaczane jako FAILED i nie zawieszaj procesu aplikacji.

Wersja 1.0.0-rc01

14 lutego 2019 r.

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

Poprawki błędów

  • Implementacja oparta na usłudze AlarmManager prawidłowo obsługuje teraz okna flex dla PeriodicWorkRequests. b/124274584

Wersja 1.0.0-beta05

6 lutego 2019 r.

Ta wersja zawiera poprawki błędów.

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował, że w interfejsie API 23 była używana wartość JobScheduler.getPendingJob(...). b/123893059
  • Naprawiono błąd NullPointerException na urządzeniach z Androidem 5.1 (poziom interfejsu API 22). lub niższy. b/123835104

Wersja 1.0.0-beta04

4 lutego 2019 r.

Ta wersja zawiera poprawki błędów.

Poprawki błędów

  • Poprawiono harmonogram pracy okresowej w implementacji opartej na AlarmManager.
  • Rozwiązaliśmy problem, który powodował, że usługa WorkManager nie mogła prawidłowo śledzić ograniczeń za pomocą implementacji opartej na AlarmManager. b/123379508
  • Naprawiono problem, który powodował, że WorkManager nie ponawiał próby po śmierci procesu, gdy za pomocą implementacji opartej na AlarmManager. b/123329850
  • Naprawiliśmy problem, który powodował, że z WorkManagera były ujawniane blokady uśpienia przy korzystaniu z interfejsu Implementacja oparta na usłudze AlarmManager.

Wersja 1.0.0-beta03

25 stycznia 2019 r.

Ta wersja zawiera poprawki błędów.

Poprawki błędów

  • Wprowadzono regresję 1.0.0-beta02, która uniemożliwiała wykonywanie zadań w pewnych sytuacjach. b/123211993
  • Rozwiązaliśmy problem, który powodował, że praca nie uwzględniała czasu do ponowienia. b/122881597
  • Naprawiono błąd ConcurrentModificationException na urządzeniach z Androidem 5.1 (interfejs API) lub mniejszą. Jest to kontynuacja poprawki w aplikacji 1.0.0-beta02. b/121345393
  • Dodaliśmy exported=false w przypadku niektórych brakujących komponentów w pliku manifestu tę adnotację.
  • Informacje o tym, jak WorkManager współpracuje z systemem operacyjnym, znajdziesz w sekcji 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 okresowa praca mogła być wykonywana więcej niż raz w danym przedziale czasu na urządzeniach z Androidem 6.0 (poziom interfejsu API 23). b/121998363
  • Naprawiono błąd ConcurrentModificationException na urządzeniach z Androidem 5.1 (interfejs API) poziomu 22) lub niższym. b/121345393
  • Naprawiono błędne wykonywanie pracy, gdy na urządzeniach nie były spełnione ograniczenia z Androidem 5.1 (poziom interfejsu API 22) lub niższym. b/122578012
  • Zoptymalizowano obsługę ukończenia pracy w celu skrócenia w niektórych przypadkach skrajnych. b/122358129
  • Dodaliśmy zmianę odnoszącą się do potencjalnych warunków wyścigu w wielu instancjach z LiveData używanych przez WorkManager.
  • Przeniesiono, aby używać zależności Room 1.1.1 zamiast 1.1.1-rc01; ich są identyczne. b/122578011

Wersja 1.0.0-beta01

19 grudnia 2018 r.

Ta wersja nie zawiera żadnych zmian interfejsu API. od tej pory WorkManager powinien zachować stabilny interfejs API do następnej wersji, chyba że wystąpi problem krytyczny. Ta wersja zawiera poprawki błędów.

Poprawki błędów

  • Anulowane wcześniej elementy podrzędne dla pomyślnie ukończonego zadania nadrzędnego nie będą już działać. 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ę interfejsu API, która będzie przydatna dla niektórych użytkowników Kotlin.

Zmiany interfejsu API

  • Element androidx.work.Result został przeniesiony do klasy wewnętrznej ListenableWorker. Zapobiega to konfliktom refaktoryzacyjnym z klasą Result najwyższego poziomu Kotlin. Ta zmiana interfejsu API jest niezbędna. b/120564418

Zmiana w interfejsie API

  • Element androidx.work.Result został przeniesiony do klasy wewnętrznej ListenableWorker.

Wersja 1.0.0-alfa12

5 grudnia 2018 r.

Ta wersja zawiera zmiany w interfejsie API powodujące niezgodność; zapoznaj się poniżej z sekcją Zmiana znaczenia zmian w interfejsie API. Prawdopodobnie udostępnimy tę wersję jako pierwszą wersję beta. alpha12 zawiera też obszerne aktualizacje dokumentacji.

Zmiany interfejsu API

  • Nowy artefakt, work-rxjava2, przedstawia RxWorker. To jest zasób typu ListenableWorker, który oczekuje na właściwość Single<Payload>.
  • W związku z nadchodzącym wycofaniem usługi Firebase JobDispatcher wycofaliśmy jej obsługę. Oznacza to, że artefakt work-firebase nie będzie już aktualizowany w momencie przejścia na wersję beta. Planujemy dodać w przyszłości alternatywną wersję.
  • Łącznie Payload w Result. Result jest teraz „zapieczętą klasą” dzięki 3 konkretnym wdrożeniom, które możesz uzyskać za pomocą Result.success() (lub Result.success(Data)), Result.failure() (albo Result.failure(Data)) i Result.retry(). ListenableFuture ma teraz wynik Result zamiast Payload. Elementy typu Worker nie mają metod pobierania ani metody ustawiania dla danych wyjściowych Data. To niezwykła zmiana.
  • Dodano Constraints.Builder.setTriggerContentMaxDelay(long, TimeUnit) i Constraints.Builder.setTriggerContentUpdateDelay(long, TimeUnit) oraz warianty, aby lepiej obsługiwać identyfikatory URI treści wyzwalających wolno wyzwalanie. b/119919774
  • Dodano WorkRequest.Builder.setBackoffCriteria(BackoffPolicy, Duration) wariant. Ta metoda wymaga interfejsu API 26.
  • Dodano metody rozszerzeń Operation.await() i ListenableFuture.await() Kotlin.
  • Nazwa Operation.getException() została zmieniona na Operation.getThrowable(). To niezwykła zmiana.
  • Klasa i metody odwołujące się do obiektu ContentUriTriggers nie są już dostępne do użytku publicznego. To niezwykła zmiana.
  • Usunęliśmy pozostałe metody varargs w WorkManager, WorkContinuation i OneTimeWorkRequest, aby usprawnić interfejs API. Aby rozwiązać problemy z kompilacją, możesz dodać do istniejących zmiennych znaczniki Arrays.asList(...). Nadal jednak uwzględniamy wersje z pojedynczym argumentem dla każdej metody. To niezwykła zmiana.
  • Usunięto WorkContinuation.combine(OneTimeWorkRequest, *) wariantu. przedstawiał mylący interfejs API; metody combine są bardziej zrozumiałe. To niezwykła zmiana.

Poprawki błędów

  • Implementacje sprzed wersji przedpremierowej z większą niezawodnością są teraz bardziej niezawodne, jeśli chodzi o odzyskiwanie stanu trwającego już procesu.
  • Pole LiveData zaobserwowane w usłudze observeForever jest śledzone przez WorkManagera. To jest backend poprawki z biblioteki pokoi. b/74477406
  • Data.Builder.build() zgłasza teraz wyjątek, jeśli zserializowany obiekt przekracza maksymalny rozmiar. Wcześniej działo się to tylko w wątku w tle, w którym nie było można prawidłowo go obsłużyć.
  • Rozróżnianie zadań zatrzymanych i anulowanych; getWorkInfoById() zwróci wartość WorkInfo z CANCELLED State w okresie ListenableWorker.onStopped().
  • Traktuj null Result jako błędy w procesie ListenableWorker. b/120362353
  • Poprawka spekulacyjna dotycząca tabletów Shield z interfejsem API 24, który czasami zwracał błąd IllegalArgumentException. b/119484416

Zmiana w interfejsie API

  • W związku z nadchodzącym wycofaniem usługi Firebase JobDispatcher wycofaliśmy jej obsługę. Oznacza to, że artefakt work-firebase nie będzie już aktualizowany w momencie przejścia na wersję beta. Planujemy dodać w przyszłości alternatywną wersję.
  • Łącznie Payload w Result. Result jest teraz „zapieczętą klasą” dzięki 3 konkretnym wdrożeniom, które możesz uzyskać za pomocą Result.success() (lub Result.success(Data)), Result.failure() (albo Result.failure(Data)) i Result.retry(). ListenableFuture ma teraz wynik Result zamiast Payload. Elementy typu Worker nie mają metod pobierania ani metod ustawiania danych wyjściowych dla danych wyjściowych Data.
  • Dodano metody rozszerzeń Operation.await() i ListenableFuture.await() Kotlin.
  • Nazwa Operation.getException() została zmieniona na Operation.getThrowable().
  • Klasa i metody odwołujące się do obiektu ContentUriTriggers nie są już dostępne do użytku publicznego.
  • Usunęliśmy pozostałe metody varargs w WorkManager, WorkContinuation i OneTimeWorkRequest, aby usprawnić interfejs API. Aby rozwiązać problemy z kompilacją, możesz dodać do istniejących zmiennych znaczniki Arrays.asList(...). Nadal jednak uwzględniamy wersje z pojedynczym argumentem dla każdej metody.
  • Usunięto WorkContinuation.combine(OneTimeWorkRequest, *) wariantu. przedstawiał mylący interfejs API; 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 od beta. W tej wersji wprowadzono zmiany w interfejsie API, które są nieistotne. zapoznaj się poniżej z sekcją Zmiana znaczenia zmian w interfejsie API.

Zmiany interfejsu API

  • work-runtime-ktx wprowadza nowe urządzenie CoroutineWorker.
  • Nazwa konta WorkStatus została zmieniona na WorkInfo. Nazwy wszystkich odpowiednich wariantów metody getStatus zostały zmienione na odpowiednich wariantów (getWorkInfo). To niezwykła zmiana.
  • Funkcja ListenableWorker.onStopped() nie akceptuje już argumentu logicznego wskazującego, czy WorkRequest został anulowany. WorkManager nie ma już tego rozróżnienia. To niezwykła zmiana.
  • Nazwa pakietu androidx.work.test została zmieniona na androidx.work.testing. To niezwykła zmiana.
  • Konfigurujący w domenie Constraints nie są już częścią publicznego interfejsu API. To niezwykła zmiana.
  • Funkcje WorkerParameters.getTriggeredContentUris() i WorkerParameters.getTriggeredContentAuthorities() zwróciły wcześniej tablice. Teraz te metody zwracają kolekcje. To niezwykła zmiana.
  • Nazwa ListenableWorker.onStartWork() została zmieniona na ListenableWorker.startWork(). To niezwykła zmiana.
  • Konstruktor dla WorkStatus nie jest już częścią publicznego interfejsu API. To niezwykła zmiana.
  • Nazwy Configuration.getMaxJobSchedulerID() i Configuration.getMinJobSchedulerID() zostały zmienione na Configuration.getMinJobSchedulerId() i Configuration.getMaxJobSchedulerId(). To niezwykła zmiana.
  • Dodaliśmy wiele adnotacji @NonNull do publicznego interfejsu API, aby poprawić jego ergonomię.
  • Dodaj interfejs WorkManager.enqueueUniqueWork() API, aby dodać do kolejki unikalnych OneTimeWorkRequest bez konieczności tworzenia WorkContinuation.
  • Wszystkie warianty metod enqueue i cancel w WorkManager zwracają teraz nowy typ Operation. To niezwykła zmiana.
  • Żadne warianty atrybutu enqueue nie akceptują już zmiennych typu WorkRequest. To niezwykła zmiana. Zamiast tego używaj kolekcji. Aby zmodyfikować istniejący kod, możesz użyć polecenia Arrays.asList(). Zrobiliśmy to, aby zmniejszyć liczbę powierzchni i metod interfejsu API.
  • Próba initialize WorkManager więcej niż raz na proces spowoduje teraz błąd IllegalStateException. To niezwykła zmiana.

Poprawki błędów

  • Elementy WorkRequest.Builder w artefaktie work-runtime-ktx używają teraz ListenableWorker. Poprawiono parametr b/117666259
  • Upewnij się, że następne uruchomienie instancji PeriodicWork przypada w przyszłości. Poprawiono parametr b/118204399
  • Podczas uruchamiania aplikacji przy użyciu WorkManagera usuń potencjalne wejścia/wyjścia dysku. Poprawiono parametr b/117796731
  • Napraw stan wyścigu w: WorkConstraintsTracker. Naprawiono android-workmanager/issues/56.

Zmiana w interfejsie API

  • Nazwa konta WorkStatus została zmieniona na WorkInfo. Nazwy wszystkich odpowiednich wariantów metody getStatus zostały zmienione na odpowiednich wariantów (getWorkInfo).
  • Funkcja ListenableWorker.onStopped() nie akceptuje już argumentu logicznego wskazującego, czy WorkRequest został anulowany. WorkManager nie ma już tego rozróżnienia.
  • Nazwa pakietu androidx.work.test została zmieniona na androidx.work.testing.
  • Konfigurujący w domenie Constraints nie są już częścią publicznego interfejsu API.
  • Funkcje WorkerParameters.getTriggeredContentUris() i WorkerParameters.getTriggeredContentAuthorities() zwróciły wcześniej tablice. Teraz te metody zwracają kolekcje.
  • Nazwa ListenableWorker.onStartWork() została zmieniona na ListenableWorker.startWork().
  • Konstruktor dla 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 atrybutu enqueue nie akceptują już zmiennych typu WorkRequest.
  • Próba initialize WorkManager więcej niż raz na proces spowoduje teraz błąd IllegalStateException.

Wersja 1.0.0-alpha10

11 października 2018 r.

Ta wersja obsługuje pracę asynchroniczną kontrolowaną przez programistę. W tej wersji wprowadzono zmiany w interfejsie API, które są nieistotne. zapoznaj się poniżej z sekcją Zmiana znaczenia zmian w interfejsie API.

Przewidujemy, że WorkManager rozpocznie ostatnie fazy okresu alfa. Spodziewamy się, że interfejs API w wersji beta będzie stabilny, dlatego prosimy o przesyłanie opinii na temat narzędzia do śledzenia błędów.

Zmiany interfejsu API

  • Usunięto wszystkie metody i klasy dostępne wcześniej w usłudze deprecated, a zwłaszcza domyślny konstruktor Worker. Jest to przełomowa zmiana interfejsu API.
  • Nazwa NonBlockingWorker została zmieniona na ListenableWorker, która jest teraz odkrytą klasą publiczną i jest gotowa do użycia.
    • Funkcja ListenableWorker zapewnia dostęp do jednej metody abstrakcyjnej, ListenableFuture<Payload> onStartWork(), która jest wywoływana w wątku głównym. Od Ciebie zależy, czy rozpoczniesz i przetwarzasz pracę asynchronicznie. Gdy skończysz, odpowiednio zaktualizuj ListenableFuture. Referencyjne implementacje komponentów ListenableFuture znajdziesz w pakiecie Futures w alpha02 (patrz sekcja WorkManager poniżej).
    • Komponent Worker rozszerza zakres ListenableWorker i nadal działa tak jak wcześniej, z abstrakcyjną metodą Result doWork().
    • Niektóre metody i użytkowników zostały losowo przełożone z Worker do ListenableWorker.
    • Wkrótce udostępnimy implementacje referencyjne dla systemów ListenableWorker, które korzystają z współrzędnych Kotlin (po opublikowaniu wersji stabilnych) i RxJava2.
  • Interfejs WorkerFactory i konkretna implementacja DefaultWorkerFactory zostały połączone w klasę abstrakcyjną o nazwie WorkerFactory. Implementacja daje pewność, że w przypadku każdej instancji WorkerFactory utworzonej przez użytkownika domyślne zachowanie oparte na odbiciach będzie nazywane „ostatnią próbą”. To niezwykła zmiana.
  • Usunięto metody WorkManager.synchronous() i WorkContinuation.synchronous() oraz wszystkie powiązane metody. Dodano ListenableFuture<Void> jako typ zwracany wielu metod w interfejsie API. Jest to przełomowa zmiana interfejsu API.
    • Teraz możesz synchronicznie pobierać i obserwować je za pomocą funkcji ListenableFuture. Na przykład hasło WorkManager.enqueue() zostało użyte do zwrócenia wartości void; zwraca teraz ListenableFuture<Void>. Możesz wywołać ListenableFuture.addListener(Runnable, Executor) lub ListenableFuture.get(), aby uruchomić kod po zakończeniu operacji.
    • Pamiętaj, że te elementy typu ListenableFuture nie informują, czy operacja zakończyła się powodzeniem, czy niepowodzeniem. tylko że skończyli. Aby znaleźć te informacje, musisz połączyć metody w usłudze WorkManager.
    • Pomijamy wywołania funkcji cancel() w przypadku tych obiektów, ponieważ są one mylące i trudne do przełożenia (czy anulujesz operację czy związaną z nią pracę?). Wynika to z umowy Future.
    • Aby zachować spójność z synchronicznymi metodami getStatus*, udostępniliśmy warianty ListenableFuture i zmieniliśmy nazwę tych, które zwracały wartość LiveData, na „LiveData” jako część nazwy (na przykład getStatusesByIdLiveData(UUID)). Jest to przełomowa zmiana w interfejsie API.

Poprawki błędów

  • Naprawiliśmy 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 ProGuard, aby zachować nowy konstruktor Worker. b/116296569
  • Popraw potencjalne zagrożenie (NullPointerException) w wyścigu, w którym czas pracy był REPLACE d. b/116253486 i b/116677275
  • WorkContinuation.combine() akceptuje teraz co najmniej 1 WorkContinuation zamiast 2 lub więcej. b/117266752

Zmiana w interfejsie API

  • Usunięto wszystkie metody i klasy dostępne wcześniej w usłudze deprecated, a zwłaszcza domyślny konstruktor Worker.
  • Interfejs WorkerFactory i konkretna implementacja DefaultWorkerFactory zostały połączone w klasę abstrakcyjną o nazwie WorkerFactory.
  • Usunięto: WorkManager.synchronous() i WorkContinuation.synchronous().
  • Metody WorkManager.getStatus*() zwracają teraz ListenableFuture. WorkManager.getStatus*LiveData() zwraca LiveData s.

Wersja 1.0.0-alpha09

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ść ten kod w pliku Gradle jako tymczasowe obejście tego problemu i naprawimy go w wersji alfa10:

Odlotowe

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

Kotlin

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

Poprawki błędów

  • Dodano kolejną poprawkę niezbędną w przypadku „100 zadań” . b/115560696
  • Dodaliśmy kilka poprawek błędów ograniczeń klucza obcych spowodowanych warunkami wyścigu. b/114705286
  • Przekazane wywołania ConstraintTrackingWorker.onStopped(boolean) do bazowego elementu Worker. b/114125093
  • Egzekwuj poprawne minimalne opóźnienie wycofywania dla Firebase JobDispatcher. b/113304626
  • Ulepszone wątkowanie gwarantuje wewnętrzny dostęp do biblioteki.
  • Skoryguj potencjalny problem z wewnętrznym usuwaniem duplikatów wartości LiveData.

Zmiany interfejsu API

  • Możesz teraz tworzyć własne instancje Worker w czasie działania, określając WorkerFactory w WorkManager.Configuration. Fabryka kreacji zastępczej to DefaultWorkerFactory, która odpowiada działaniu poprzednich wersji WorkManagera.
    • Domyślne konstruktory dla Worker i NonBlockingWorker są teraz oznaczone jako wycofane. Użyj nowego konstruktora (Worker(Context, WorkerParameters)) i wywołaj super(Context, WorkerParameters); w kolejnych wersjach WorkManager zostanie usunięty domyślny konstruktor.
  • Zaczęliśmy korzystać z nowego artefaktu ListenableFuture wewnętrznie (bez zależności Guava). W kolejnych wersjach dodamy do tego interfejsu API ListenableFutures. Ta zmiana umożliwi późniejsze ukrycie strony NonBlockingWorker.
  • Dodaj możliwość aktywowania zadań czasowych w TestDriver przez funkcje TestDriver.setInitialDelayMet(UUID) i TestDriver.setPeriodDelayMet(UUID). b/113360060

Zmiany najważniejsze

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

Wersja 1.0.0-alpha08

27 sierpnia 2018 r.

Poprawki błędów

  • Komponenty WorkManager wyraźnie oznaczone jako rozruch bezpośrednie, nieświadome, dzięki czemu nie uruchamiają się podczas bezpośredniego rozruchu. W przyszłości udostępnimy wersję WorkManagera z obsługą bezpośredniego rozruchu. b/112665532
  • Rozwiązaliśmy problem, który powodował, że ponawiana praca nie była wykonywana. b/112604021
  • Naprawiliśmy problem z powtarzającym się okresowym wykonywaniem zadań (związane z powyższym problemem). b/112859683
  • Uznawane zasady ponowienia, gdy proces aplikacji jest już uruchomiony.
  • Poprawiono komunikaty o wyjątkach w pliku Data, wskazujące limit na 10 KB.
  • Zmniejszono maksymalną wartość z Configuration.setMaxSchedulerLimit(int) do 50, aby uwzględnić pewne opóźnienia w zakończeniu przetwarzania JobScheduler. b/112817355

Wersja 1.0.0-alpha07

16 sierpnia 2018 r.

Poprawki błędów

  • Naprawiono potencjalne zapytanie SQL z ujemnymi limitami, które mogło zwrócić nieograniczoną liczbę wyników.
  • Wykonanie zadania, które zostało zakończone, powoduje teraz prawidłowe anulowanie wszystkich oczekujących kopii tej pracy w innych algorytmach szeregowania. Doprowadziło to do przekroczenia limitu JobScheduler zadań. b/111569265
  • Naprawiono ConcurrentModificationException w ConstraintTracker. b/112272753
  • Adnotacje typu zwracania Data.getBooleanArray(String) i Data.getIntArray(String) zostały zmienione na @Nullable zamiast @NonNull. b/112275229

Zmiany interfejsu API

  • Rozszerzenie Worker rozszerza teraz nowe zajęcia: NonBlockingWorker. Nie będzie to miało wpływu na bieżące wykorzystanie danych. W przyszłości NonBlockingWorker stanie się w pełni obsługiwaną encją na potrzeby rozwiązań z niestandardowymi wątkami.
  • Adnotacje typu zwracania Data.getBooleanArray(String) i Data.getIntArray(String) zostały zmienione na @Nullable zamiast @NonNull. b/112275229
  • Rozszerzenia Kotlin: wycofaliśmy dyrektywę Map.toWorkData() i dodaliśmy workDataOf(vararg Pair<String, Any?>) najwyższego poziomu, aby zapewnić większą spójność z istniejącymi interfejsami API.

Wersja 1.0.0-alpha06

1 sierpnia 2018 r.

Poprawki błędów

  • Zapobiegaj blokadzie bazy danych podczas planowania pracy. b/111801342
  • Usuń błąd, który powodował, że aplikacja PeriodicWork nie uruchamiała się zgodnie z harmonogramem w trybie uśpienia. b/111469837
  • Napraw warunek wyścigu podczas śledzenia ograniczeń, które powodują awarię WorkManager. googlecodelabs/android-workmanager/issues/56.
  • Przy korzystaniu z elementu WorkRequest.Builder#build() twórz unikalne elementy WorkRequest. b/111408337
  • Włączaj używanie usługi RescheduleReceiver tylko wtedy, gdy komponenty WorkRequest jej potrzebują. b/111765853

Wersja 1.0.0-alpha05

24 lipca 2018 r.

Zmiany interfejsu API

  • WorkManager.getInstance() jest teraz oznaczona adnotacją @NonNull zamiast @Nullable. Jeśli usługa singleton nie zostanie prawidłowo zainicjowana w przypadku inicjowania ręcznego, metoda zwróci IllegalStateException. To jest zmiana interfejsu API powodująca niezgodność.
  • Dodaliśmy nowy interfejs API Configuration.Builder.setMinimumLoggingLevel(int), który może kontrolować szczegółowość WorkManagera. Domyślnie WorkManager rejestruje zasady Log.INFO i nowsze.
  • Zmieniono podpis Data.getString(), aby nie używał już wartości domyślnej (domyślnie null). Jest to przełomowa zmiana w interfejsie API.
  • Niektóre metody potrzebne tylko do użytku wewnętrznego oznaczono jako @hide. Obejmuje to konstruktor Constraints, Data.toByteArray() oraz Data.fromByteArray(byte[]). Jest to przełomowa zmiana interfejsu API.

Poprawki błędów

  • WorkManager nie wykonuje już zadań w znanych przypadkach automatycznej kopii zapasowej. Mogło to spowodować wypadek. b/110564377
  • Rozwiązano podwójne harmonogramy (PeriodicWorkRequest) podczas korzystania z zasad JobScheduler. b/110798652
  • Rozwiązaliśmy problem z nieprawidłowym wykonywaniem zadań 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 niektóre potencjalne warunki wyścigu i problemy z czasem jego trwania.
  • Prawidłowo zwolniono BroadcastReceiver sekund, które nie były już potrzebne.
  • Zoptymalizowana jest wydajność zmiany harmonogramu w przypadku ponownego uruchomienia aplikacji po wymuszeniu zamknięcia.
  • Zezwolono na wywoływanie funkcji TestScheduler.setAllConstraintsMet(UUID) przed lub po umieszczeniu danego elementu WorkRequest w kolejce. b/111238024

Zmiany najważniejsze

  • WorkManager.getInstance() jest teraz oznaczona adnotacją @NonNull zamiast @Nullable.
  • Zmieniono podpis Data.getString(), aby nie używał 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() oraz Data.fromByteArray(byte[]).

Wersja 1.0.0-alpha04

26 czerwca 2018 r.

Poprawki błędów

  • Gdy korzystasz z implementacji opartej na AlarmManager, harmonogramy zdarzeń typu PeriodicWorkRequest są teraz prawidłowo ustawiane.
  • Rozwiązaliśmy problem, który mógł wystąpić podczas zmiany harmonogramu wszystkich instancji roboczych po wymuszeniu zatrzymania lub ponownym uruchomieniu. b/110507716
  • Dodano adnotacje dotyczące wartości null do różnych interfejsów API WorkManager. b/110344065
  • Rejestruje nieobsłużone wyjątki, które występują podczas wykonywania instancji roboczej. b/109900862
  • Dozwolone niszczące migracje bazy danych na wypadek przywrócenia starszej wersji WorkManagera. b/74633270
  • Rozwiązaliśmy problem, który powodował awarię migracji przy tworzeniu zduplikowanych tagów niejawnych. To bardzo rzadki problem, który występuje tylko w przypadku samodzielnego użycia tego samego formatu tagu niejawnego.

Wersja 1.0.0-alpha03

19 czerwca 2018 r.

Poprawki błędów

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

  • Rozwiązaliśmy zduplikowane zadania występujące podczas korzystania z usługi JobScheduler po ponownym uruchomieniu urządzenia.

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

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

  • Naprawiono błąd, który występował podczas ponownego dodawania WorkRequest do kolejki. 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 interfejsu API

  • Dodano getStatusesSync(), synchroniczną wersję WorkContinuation.getStatuses().
  • Worker potrafi rozróżnić anulowanie inicjowane przez użytkownika od tymczasowego zatrzymania na żądanie systemu operacyjnego. Metoda Worker.isStopped() zwraca wartość true, jeśli zostanie zażądany jakikolwiek przystanek. Funkcja Worker.isCancelled() zwraca wartość true, gdy zadanie zostało wyraźnie anulowane. b/79632247
  • Dodano obsługę JobParameters#getNetwork() w interfejsie API 28. Ta informacja jest udostępniana przez Worker.getNetwork().
  • Dodano zasadę Configuration.Builder.setMaxSchedulerLimit(int maxSchedulerLimit), aby umożliwić Ci wyegzekwowanie liczby zadań, które można wysłać do usług JobScheduler lub AlarmManager. Dzięki temu WorkManager nie będzie mógł zająć wszystkich dostępnych JobScheduler miejsc.
  • Dodano Configuration.setJobSchedulerJobIdRange(int minJobSchedulerId, int maxJobSchedulerId), który ułatwia zdefiniowanie zakresu identyfikatorów zadań JobScheduler, których może używać WorkManager. b/79996760
  • Worker.getRunAttemptCount() zwraca bieżącą liczbę uruchomień dla danego Worker. b/79716516
  • WorkManager.enqueueUniquePeriodicWork(String uniqueWorkName, ExistingPeriodicWorkPolicy existingPeriodicWorkPolicy, PeriodicWorkRequest periodicWork) umożliwia dodanie unikalnych komponentów PeriodicWorkRequest do kolejki. 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() do dodatkowego czyszczenia stanu wewnętrznego.
  • Dodano zadanie WorkManager.pruneWork(), aby usunąć ukończone zadania z wewnętrznej bazy danych. b/79950952, b/109710758

Zmiany w działaniu

  • Do wszystkich elementów WorkRequest dodano tag niejawny. Jest to w pełni kwalifikowana nazwa klasy obiektu Worker. Umożliwia to usuwanie elementów WorkRequest, które nie mają komponentów tag lub gdy usługa id jest niedostępna. b/109572351

Zmiany najważniejsze

  • Nazwa Worker.WorkerResult została zmieniona na Worker.Result.
  • Worker.onStopped ma teraz dodatkowy parametr isCancelled, który jest ustawiony na true, jeśli parametr Worker został jednoznacznie anulowany.

Wersja 1.0.0-alpha02

24 maja 2018 r.

Poprawki błędów

  • Naprawiono NullPointerException na State.isFinished(). b/79550068
  • Rozwiązaliśmy problem, który powodował przełożenie spotkań Worker na Application.onCreate(). b/79660657
  • Rozwiązaliśmy problem, który powodował, że można było zaplanować więcej pracy, niż pozwala na to system operacyjny. b/79497378
  • Czyszczenie blokad uśpienia powiązanych z urządzeniami Worker zostało przeniesione do wątku w tle.
  • Implementacja AlarmManager jest teraz prawidłowo czyszczona po zakończeniu wszystkich oczekujących zadań.
  • Naprawiono zapytania SQL czyszczenia, które wpływały na regiony inne niż angielski. B/80065360
  • Dodano obsługę komponentów float w pliku 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 interfejsu API

  • Elementy typu Worker mogą zareagować na zatrzymanie. Worker.isStopped() może posłużyć do sprawdzenia, czy Worker został zatrzymany. Worker.onStopped() może służyć do wykonywania prostych operacji czyszczenia.
  • Interfejs API Worker.getTags() zwraca wartość Set tagów powiązanych z tabelą Worker.
  • Dodano przeciążenia (javax.time.Duration) dla interfejsów API, które wymagają kombinacji czasu trwania i TimeUnit. Chroni Cię @RequiresApi(26).
  • WorkManager rozszerzenia zostały przeniesione z pakietu androidx.work.ktx do pakietu androidx.work. Stare rozszerzenia są 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-alpha01

8 maja 2018 r.

WorkManager upraszcza planowanie i wykonywanie gwarantowana praca w tle z uwzględnieniem ograniczeń. Ta początkowa wersja to 1.0.0-alpha01.