Menedżer pracy
Najnowsza aktualizacja | Wersja stabilna | Kandydat do publikacji | Wersja Beta | Wersja alfa |
---|---|---|---|---|
17 kwietnia 2024 r. | 2.9.0 | - | - | 2.10.0-alfa02 |
Deklarowanie zależności
Aby dodać zależność od WorkManagera, musisz dodać do projektu repozytorium Google Maven:
W pliku build.gradle
aplikacji lub modułu dodaj zależności artefaktów, których potrzebujesz:
Odlotowy
dependencies { def work_version = "2.9.0" // (Java only) implementation "androidx.work:work-runtime:$work_version" // Kotlin + coroutines implementation "androidx.work:work-runtime-ktx:$work_version" // optional - RxJava2 support implementation "androidx.work:work-rxjava2:$work_version" // optional - GCMNetworkManager support implementation "androidx.work:work-gcm:$work_version" // optional - Test helpers androidTestImplementation "androidx.work:work-testing:$work_version" // optional - Multiprocess support implementation "androidx.work:work-multiprocess:$work_version" }
Kotlin
dependencies { val work_version = "2.9.0" // (Java only) implementation("androidx.work:work-runtime:$work_version") // Kotlin + coroutines implementation("androidx.work:work-runtime-ktx:$work_version") // optional - RxJava2 support implementation("androidx.work:work-rxjava2:$work_version") // optional - GCMNetworkManager support implementation("androidx.work:work-gcm:$work_version") // optional - Test helpers androidTestImplementation("androidx.work:work-testing:$work_version") // optional - Multiprocess support implementation("androidx.work:work-multiprocess:$work_version") }
Informacje o korzystaniu z rozszerzeń Kotlin znajdziesz w dokumentacji ktx.
Więcej informacji o zależnościach znajdziesz w artykule Dodawanie zależności kompilacji.
Opinia
Twoja opinia pomoże nam ulepszyć Jetpack. Daj nam znać, jeśli znajdziesz nowe wydania lub masz pomysły na ulepszenie tej biblioteki. Zanim utworzysz nową bibliotekę, przejrzyj problemy z tą biblioteką. Możesz oddać głos w ramach istniejącego problemu, klikając przycisk gwiazdki.
Więcej informacji znajdziesz w dokumentacji narzędzia Issue Tracker.
Wersja 2.10
Wersja 2.10.0-alfa02
17 kwietnia 2024 r.
Aplikacja androidx.work:work-*:2.10.0-alpha02
została zwolniona. Wersja 2.10.0-alpha02 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Dodano możliwość wysyłania spanów logów czasu za pomocą konfigurowalnego
@RestrictTo
Tracer
wWorkManager
. (I17d7f, b/260214125) - Dodano:
Configuration.workerCoroutineContext
, aby kontrolować dyspozytora, gdzie jest wykonywanyCoroutineWorker
. Warto całkowicie unikać używaniaDispatchers.Default
wWorkManager
. (Icd1b7). - Dodawanie niestandardowych modułów obsługi wyjątków dla instancji roboczych (Ib1b74, b/261190695)
OneTimeWorkRequest.Builder
iPeriodicWorkRequest.Builder
można teraz konstruować przy użyciuKClass
zamiastClass
:val request = OneTimeWorkRequest.Builder(Worker::class).setConstraints(...).build()
(Ib55f6)WorkManager
zajęcia zostały przeniesione do Kotlin. Teraz metody, które zwracająLiveData
,ListenableFuture
lubFlow
, dostarczają poprawne informacje dotyczące wartości null. Może wymagać zmian w kodzie źródłowym klienta, jeśli założenia dotyczące wartości null w tym kodzie były nieprawidłowe. (If6757)
Wersja 2.10.0-alfa01
24 stycznia 2024 r.
Aplikacja androidx.work:work-*:2.10.0-alpha01
została zwolniona. Wersja 2.10.0-alpha01 zawiera te zatwierdzenia.
Nowe funkcje
- Deweloperzy mogą określić
NetworkRequest
jako ograniczenie dla instancji roboczej za pomocą metodyConstraints.setRequiredNetworkRequest
. Umożliwia to dokładniejszą kontrolę nad siecią, w której ma działać ten instancja robocza.
Zmiany w interfejsie API
- Dodano możliwość określenia ograniczenia
NetworkRequest
. (Id98a1, b/280634452)
Wersja 2.9
Wersja 2.9.0
29 listopada 2023 r.
Aplikacja androidx.work:work-*:2.9.0
została zwolniona. Wersja 2.9.0 zawiera te zatwierdzenia.
Ważne zmiany od wersji 2.8.0
- Dostrzegalność przez
Flow
s ZamiastLiveData
postęp instancji roboczej można teraz obserwować za pomocą procesu za pomocą metodyWorkManager.getWorkInfosFlow
i podobnych metod. - Teraz
WorkManager
udostępnia wskazówkę, dlaczego instancja robocza została wcześniej zatrzymana. Zapytanie o nią można wysłać do instancji roboczejgetStopReason()
lub zWorkInfo
za pomocągetStopReason()
. - Precyzyjne ustalanie harmonogramu okresowych pracowników przy użyciu:
setNextScheduleTimeOverride
. Umożliwia to dynamiczne obliczanie następnego harmonogramu okresowego pracy, które można wykorzystać do wdrożenia zaawansowanych funkcji, takich jak adaptacyjne czasy odświeżania, niestandardowe zachowanie ponawiania prób lub uruchamianie zasobu roboczego kanału informacyjnego przed każdym rankiem pobudki. Z tymi technikami należy używać funkcjiExistingPeriodicWorkPolicy.UPDATE
, aby uniknąć anulowania obecnie uruchomionej instancji roboczej podczas planowania kolejnej. - Testy w usłudze WorkManager z dopasowywaniem wątków w środowisku produkcyjnym. Funkcji
ExecutorsMode.PRESERVE_EXECUTORS
można użyć w usłudzeinitializeTestWorkManager
, aby zachować wykonawców ustawionych wConfiguration
i używać rzeczywistego wątku głównego. - Interfejsy API koroutin, takie jak
CoroutineWorker
, zostały przeniesione z dodatkowego środowiska wykonawczego artefaktu do środowiska wykonawczego głównego artefaktu. work-runtime-ktx jest teraz puste.
Zmiany w interfejsie API
- Element
stopReason
został dodany do tablicyWorkInfo
. UdostępniastopReason
po uruchomieniu instancji roboczej. Może przydać się podczas raportowaniastopReason
w użyteczny sposób, ponieważ po zatrzymaniu pracownika aplikacja sama może zostać bardzo szybko zamknięta. (I21386) - Zezwalaj na ustawianie parametru
Clock
za pomocą konfiguracji i używanie go do sekwencjonowania wykonywania testów instancji roboczych. (IC586e) - Do
ListenableWorker
dodano metodęgetStopReason()
, która wskazuje, dlaczego instancja robocza została zatrzymana. (I07060) - Dodano element
WorkManagerTestInitHelper#closeWorkDatabase()
, aby uniknąć ostrzeżenia Closeguard o wycieku zasobów. (Ia8d49) - Konstruktor
WorkInfo
jest teraz publiczny, co może być przydatne podczas testowania. (Ia00b6, b/209145335) work-runtime-ktx
jest teraz pusty,CoroutineWorker
i inne narzędzia specyficzne dla Kotlin są teraz dostępne w głównym artefakcie środowiska wykonawczego. (I71a9a)- Dodano metodę
setNextScheduleTimeOverride
, która umożliwia dokładne ustawianie okresowych harmonogramów pracy (I3b4da). - Dodano
getNextScheduleTimeMillis
, aby uzyskać informacje o zaplanowanym czasie uruchomienia, dodano do folderuWorkInfo
. (I797e4) - Początkowe opóźnienie i okresowość są dodawane do zakresu
WorkInfo
. (I52f2f) - Dodano metodę obserwacji instancji roboczych za pomocą przepływów za pomocą metod
getWorkInfosByTagFlow
,getWorkInfoByIdFlow
,getWorkInfosForUniqueWorkFlow
,getWorkInfosFlow
(If122a) - Dodano brakujące adnotacje
@RequiresApi(...)
do konstruktorów i właściwościConstraints
. Są teraz dostosowane do odpowiednich adnotacji w elementach ustawiających w projekcieConstraints.Builder
, które istniały we wczesnych wersjach interfejsuWorkManager
. (I6d7d2) - W
WorkManager
obowiązuje teraz oddzielny limit dla instancji roboczych identyfikatora treści, co daje im gwarantowane przedziały wJobScheduler
, co pozwala zapobiegać pomijaniu treści podczas dużego obciążenia. Limit można skonfigurować na stronieConfiguration.Builder.setContentUriTriggerWorkersLimit
. (Ic128f) - Ograniczenia zostały dodane do zakresu
WorkInfo
. (I162c0)
Wersja 2.9.0-rc01
18 października 2023 r.
Aplikacja androidx.work:work-*:2.9.0-rc01
została zwolniona. Wersja 2.9.0-rc01 zawiera te zatwierdzenia.
- Brak zmian od ostatniej wersji beta
Wersja 2.9.0-beta01
6 września 2023 r.
Aplikacja androidx.work:work-*:2.9.0-beta01
została zwolniona. Wersja 2.9.0-beta01 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Dodano stałe przyczyny zatrzymania zwracane przez
WorkInfo.stopReason
iListenableWorker.stopReason
(I0cc00)
Wersja 2.9.0-alfa02
26 lipca 2023 r.
Aplikacja androidx.work:work-*:2.9.0-alpha02
została zwolniona. Wersja 2.9.0-alpha02 zawiera te zatwierdzenia.
Nowe funkcje
- Teraz
WorkManager
udostępnia wskazówkę, dlaczego instancja robocza została wcześniej zatrzymana. Zapytanie o nią można wysłać do instancji roboczejgetStopReason()
lub zWorkInfo
za pomocągetStopReason()
.
Zmiany w interfejsie API
- Element
stopReason
został dodany do tablicyWorkInfo
. UdostępniastopReason
po uruchomieniu instancji roboczej. Może być przydatna przy zgłaszaniustopReason
, ponieważ po zatrzymaniu działania pracownika aplikacja może zostać bardzo szybko zamknięta. (I21386) - Zezwalaj na ustawianie zegara w konfiguracji i używanie go do sekwencjonowania wykonywania testów instancji roboczych. (IC586e)
- Do
ListenableWorker
dodano metodęgetStopReason()
, która wskazuje, dlaczego instancja robocza została zatrzymana. (I07060) - Dodano element
WorkManagerTestInitHelper#closeWorkDatabase()
, aby uniknąć ostrzeżenia Closeguard o wycieku zasobów. (Ia8d49)
Poprawki błędów
- Dodaliśmy możliwość pomijania elementu
overrideNextScheduleTime
przy użyciu elementuTestDriver
i rozwiązaliśmy problemy ze sprawdzaniem poprawności. (Ic2905)
Wersja 2.9.0-alfa01
7 czerwca 2023 r.
Aplikacja androidx.work:work-*:2.9.0-alpha01
została zwolniona. Wersja 2.9.0-alpha01 zawiera te zatwierdzenia.
Nowe funkcje
- Dostrzegalność przez
Flow
s ZamiastLiveData
postęp instancji roboczej można teraz obserwować za pomocą procesu za pomocą metodyWorkManager.getWorkInfosFlow
i podobnych metod. - Precyzyjne ustalanie harmonogramu okresowych pracowników przy użyciu:
setNextScheduleTimeOverride
. Umożliwia to dynamiczne obliczanie następnego harmonogramu okresowego pracy, które można wykorzystać do wdrożenia zaawansowanych funkcji, takich jak adaptacyjne czasy odświeżania, niestandardowe zachowanie ponawiania prób lub uruchamianie zasobu roboczego kanału informacyjnego przed każdym rankiem pobudki. Z tymi technikami należy używać funkcjiExistingPeriodicWorkPolicy.UPDATE
, aby uniknąć anulowania obecnie uruchomionej instancji roboczej podczas planowania kolejnej. WorkManager
przeprowadza testy z dopasowaniem wątków w środowisku produkcyjnym. FunkcjiExecutorsMode.PRESERVE_EXECUTORS
możesz użyć, aby zachować wykonawców ustawionych wConfiguration
i używać rzeczywistego wątku głównego.- Interfejsy API Coroutine, takie jak
CoroutineWorker
, zostały przeniesione z dodatkowego artefaktuwork-runtime-ktx
do głównego artefaktuwork-runtime
. Plikwork-runtime-ktx
jest teraz pusty.
Zmiany w interfejsie API
- Konstruktor
WorkInfo
jest teraz publiczny, co może być przydatne podczas testowania. (Ia00b6, b/209145335) work-runtime-ktx
jest teraz pusty,CoroutineWorker
i inne narzędzia specyficzne dla Kotlin są teraz dostępne w głównym artefakciework-runtime
. (I71a9a)- Dodano metodę
setNextScheduleTimeOverride
, która umożliwia dokładne ustawianie okresowych harmonogramów pracy (I3b4da). - Nazwa elementu
getEarliestRunTimeMillis
została zmieniona nagetNextScheduleTimeMillis
. (I2bd7a) - Informacje o następnym zaplanowanym czasie uruchomienia zostaną dodane do tabeli
WorkInfo
. (I797e4) - Początkowe opóźnienie i okresowość są dodawane do zakresu
WorkInfo
. (I52f2f) - Dodano metodę obserwacji instancji roboczych za pomocą przepływów za pomocą metod
getWorkInfosByTagFlow
,getWorkInfoByIdFlow
,getWorkInfosForUniqueWorkFlow
,getWorkInfosFlow
(If122a) - Dodano brakujące adnotacje
@RequiresApi(...)
do konstruktorów i właściwości Ograniczenia. Są teraz dostosowane do odpowiednich adnotacji w elementach ustawiających w projekcieConstraints.Builder
, które istniały we wczesnych wersjach interfejsuWorkManager
. (I6d7d2) - W
WorkManager
obowiązuje teraz oddzielny limit dla instancji roboczych identyfikatora treści, co daje im gwarantowane przedziały wJobScheduler
, co pozwala zapobiegać pomijaniu treści podczas dużego obciążenia. Limit można skonfigurować na stronieConfiguration.Builder.setContentUriTriggerWorkersLimit
. (Ic128f) - Ograniczenia zostały dodane do zakresu
WorkInfo
. (I162c0)
Wersja 2.8
Wersja 2.8.1
22 marca 2023 r.
Aplikacja androidx.work:work-*:2.8.1
została zwolniona. Wersja 2.8.1 zawiera te zatwierdzenia.
Poprawki błędów
- Naprawiliśmy błąd ANR w
RescheduleReceiver
, który wcześniej nie obsługiwał 2 jednoczesnych transmisji. (b/236906724)
Wersja 2.8.0
8 lutego 2023 r.
Aplikacja androidx.work:work-*:2.8.0
została zwolniona. Wersja 2.8.0 zawiera te zatwierdzenia.
Ważne zmiany od wersji 2.7.0
Nowe funkcje
- Dodaliśmy możliwość aktualizowania funkcji
WorkRequests
w nienachalny sposób, co pozwala zachować pierwotny czas umieszczenia w kolejce, utworzyć łańcuch itp. Więcej informacji znajdziesz w szczegółowym poście na blogu na temat tej funkcji oraz w dokumentacji javadocs na tematWorkManager.updateWork
iExistingPeriodicWorkPolicy.UPDATE
.
Zmiany w interfejsie API
- Element
WorkManager.updateWork
został dodany, aby zaktualizować utwór z zachowaniem pierwotnego czasu umieszczenia w kolejce i łańcucha.(I9a248, b/219446409) - Dodano użytkownika
ExistingPeriodicWorkPolicy.UPDATE
Ta zasada umożliwia aktualizowanie utworu okresowego według nazwy. Jest podobny do dotychczasowego elementuREPLACE
, ale mniej inwazyjny: nie anuluje działania instancji roboczej, jeśli jest uruchomiona i zachowuje czas w kolejce. Początkowe opóźnienie i okres są obliczane na podstawie czasu pierwotnej kolejki, a nie aktualizacji. UsługaREPLACE
została wycofana, aby ułatwić pomyłki między bardzo podobną nazwąREPLACE
iUPDATE
. Jeśli nadal chcesz zachować poprzednią semantykę właściwościREPLACE
, możesz użyć nowo dodanej funkcjiCANCEL_AND_REENQUEUE
, która jest identyczna z elementemREPLACE
. (I985ed, b/219446409) - Dodano możliwość przechwytywania wyjątków dotyczących planowania, podając
Consumer<Throwable>
przez setSchedulingExceptionHandler - Dodaliśmy możliwość podania funkcji
Consumer<Throwable>
za pomocą funkcji setInitializationExceptionHandler w celu określenia, czy podczas próby zainicjowania WorkManagera wystąpiły problemy. - Wbudowane pomoce dla usług
OneTimeWorkRequest
iPeriodicWorkRequest
zostały przeniesione zandroidx.work:work-runtime-ktx
doandroidx.work:work-runtime
(I0010f, b/209145335) - Metody pomocnicze
WorkQuery.fromIds
,WorkQuery.fromStates
,WorkQuery.fromUniqueWorkNames
,WorkQuery.fromTags
zostały dodane bezpośrednio, aby utworzyćWorkQuery
. (b/199919736) (If48f2, b/199919736) - Element
getForegroundInfo
został dodany do listyWorker
. (Ic1ead) RxWorker
zarówno w przypadku kodu RxJava 2, jak i RxJava 3, ma teraz wartośćsetForeground
zwracającą wartośćCompletable
, której można użyć zamiastsetForegroundInfoAsync
zwracającegoListenableFuture
.RxWorker
zarówno w przypadku kodu RxJava 2, jak i RxJava 3, zawieragetForegroundInfo
zwracającą wartośćSingle
, której można użyć zamiastgetForegroundInfoAsync
zwracającegoListenableFuture
. (b/203851459)- Ograniczenia można teraz tworzyć bezpośrednio, zamiast korzystać z metody
Constraints.Builder
, co jest wygodne dla użytkowników aplikacji Kotlin. (Idc390, b/137568653) - Dodano możliwość sprawdzenia, czy
WorkManager
został zainicjowany. Dodaliśmy też nowy interfejs APIgetConfiguration()
dla deweloperów bibliotek, aby uzyskać konfigurację, na podstawie której zainicjowano platformęWorkManager
. (I6eff3, b/212300336)
Poprawki błędów
- Rozwiązaliśmy problem z chciwym algorytmem szeregowania, który uniemożliwiał działanie instancji roboczych natychmiast po załadowaniu. (I9686b, b/248111307)
- Dodano
@RequiresPermission
do interfejsów API, które wymagają przyznania uprawnieniaPOST_NOTIFICATIONS
w pakiecie SDK 33 i nowszych wersjach. (Ie542e, b/238790278) - Zastosuj anulowanie w:
CoroutineScope
doListenableFuture
, jeśli używaszsuspendCancellableCoroutine
.
Wersja 2.8.0-rc01
7 grudnia 2022 r.
Aplikacja androidx.work:work-*:2.8.0-rc01
została zwolniona. Wersja 2.8.0-rc01 zawiera te zatwierdzenia.
Nowe funkcje
- Brak nowych funkcji w tej wersji. To głównie jest wzrost wersji
Wersja 2.8.0-beta02
9 listopada 2022 r.
Aplikacja androidx.work:work-*:2.8.0-beta02
została zwolniona. Wersja 2.8.0-beta02 zawiera te zatwierdzenia.
Poprawki błędów
- Naprawiono metodę
equals
wWorkInfo
, która wcześniej nie uwzględniała informacji nowej generacji. (4977cc)
Wersja 2.8.0-beta01
5 października 2022 r.
Aplikacja androidx.work:work-*:2.8.0-beta01
została zwolniona. Wersja 2.8.0-beta01 zawiera te zatwierdzenia.
Poprawki błędów
- Rozwiązaliśmy problem z chciwym algorytmem szeregowania, który uniemożliwiał działanie instancji roboczych natychmiast po załadowaniu. (I9686b, b/248111307)
Wersja 2.8.0-alfa04
7 września 2022 roku
Aplikacja androidx.work:work-*:2.8.0-alpha04
została zwolniona. Wersja 2.8.0-alpha04 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Dodano obiekty
WorkerInfo.getGeneration()
iWorkerParameters.getGeneration()
, które zwracają wygenerowanie instancji roboczej. Instancja robocza ma wiele generacji, jeśli została zaktualizowana za pomocąWorkManager.updateWork
lubWorkManager.enqueueUniquePeriodicWork
przy użyciuExistingPeriodicWorkPolicy.UPDATE
. Pamiętaj, że jeśli instancja robocza jest obecnie uruchomiona, może ona zwrócić nowszą generację na podstawie aktualnie uruchomionej instancji roboczej, jeśli aktualizacja nastąpiła podczas jej wykonywania. (I665c5, b/219446409) (I128a9, b/219446409) - Dodano
InitializationExceptionHandler
– moduł obsługi wyjątków, który może służyć do określania, czy podczas próby zainicjowaniaWorkManager
wystąpiły problemy. (I061de)
Wersja 2.8.0-alfa03
10 sierpnia 2022 r.
Aplikacja androidx.work:work-*:2.8.0-alpha03
została zwolniona. Wersja 2.8.0-alpha03 zawiera te zatwierdzenia.
Nowe funkcje
- Dodano możliwość aktualizowania pliku
WorkRequests
w nieuciążliwy sposób, z zachowaniem pierwotnego czasu umieszczenia w kolejce, tworzenia łańcuchów itp. Aby dowiedzieć się więcej, zobaczWorkManager.updateWork
iExistingPeriodicWorkPolicy.UPDATE
.
Zmiany w interfejsie API
- Element
WorkManager.updateWork
został dodany, aby zaktualizować utwór z zachowaniem pierwotnego czasu umieszczenia w kolejce i łańcucha.(I9a248, b/219446409) - Dodano użytkownika
ExistingPeriodicWorkPolicy.UPDATE
Ta zasada umożliwia aktualizowanie utworu okresowego według nazwy. Jest podobny do dotychczasowego elementuREPLACE
, ale mniej inwazyjny: nie anuluje działania instancji roboczej, jeśli jest uruchomiona i zachowuje czas w kolejce. Początkowe opóźnienie i okres są obliczane na podstawie czasu pierwotnej kolejki, a nie aktualizacji. FunkcjaREPLACE
została wycofana, aby ułatwić pomyłki między bardzo podobną nazwąREPLACE
iUPDATE
. Jeśli nadal chcesz zachować poprzednią semantykę właściwościREPLACE
, możesz użyć nowo dodanej funkcjiCANCEL_AND_REENQUEUE
, która jest identyczna z elementemREPLACE
. (I985ed, b/219446409) - Można dodać możliwość przechwytywania wyjątków planowania przez zdefiniowanie
SchedulingExceptionHandler
. (I033eb) - Wbudowane pomoce dla usług
OneTimeWorkRequest
iPeriodicWorkRequest
zostały przeniesione zandroidx.work:work-runtime-ktx
doandroidx.work:work-runtime
(I0010f, b/209145335)
Poprawki błędów
- Dodano
@RequiresPermission
do interfejsów API, które wymagają przyznania uprawnienia POST_MESSAGES w pakiecie SDK 33 lub nowszym. (Ie542e, b/238790278)
Wersja 2.8.0-alfa02
6 kwietnia 2022 roku
Aplikacja androidx.work:work-*:2.8.0-alpha02
została zwolniona. Wersja 2.8.0-alpha02 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Ograniczenia można teraz tworzyć bezpośrednio, zamiast korzystać z konstruktora, co jest wygodne dla użytkowników aplikacji Kotlin. (Idc390, b/137568653)
- Dodano możliwość sprawdzenia, czy
WorkManager
został zainicjowany. Dodaliśmy też nowy interfejs APIgetConfiguration()
dla deweloperów bibliotek, aby uzyskać konfigurację, na podstawie której zainicjowano platformęWorkManager
. (I6eff3, b/212300336)
Wersja 2.8.0-alfa01
12 stycznia 2022 r.
Aplikacja androidx.work:work-*:2.8.0-alpha01
została zwolniona. Wersja 2.8.0-alpha01 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Metody pomocnicze
WorkQuery.fromStates
,WorkQuery.fromUniqueWorkNames
iWorkQuery.fromTags
zostały dodane, aby bezpośrednio utworzyć element WorkQuery. (If48f2, b/199919736) - Dodaje eksperymentalne metody BuildCompat na potrzeby przyszłych pakietów SDK (Iafd82, b/207528937)
- Dodaj
getForegroundInfo
doWorker
. (Ic1ead) - Dodano metody pomocnicze
WorkQuery.fromIds
do tworzenia WorkQuery bezpośrednio z identyfikatorów. (Ie5bdf, b/199919736) - W RxWorker znajduje się teraz
setForeground
zwracającyCompletable
, którego można użyć zamiastsetForegroundInfoAsync
zwracającegoListenableFuture
. (I85156) - RxWorker dla RxJava 2 ma teraz
getForegroundInfo
zwracającą wartośćSingle
, której można użyć zamiastgetForegroundInfoAsync
zwracającegoListenableFuture
. (I21c91, b/203851459) - RxWorker dla RxJava 3 ma teraz
getForegroundInfo
zwracającą wartośćSingle
, której można użyć zamiastgetForegroundInfoAsync
zwracającegoListenableFuture
. (I1ca8a) - W RxWorker znajduje się teraz
setForeground
zwracającyCompletable
, którego można użyć zamiastsetForegroundInfoAsync
zwracającegoListenableFuture
. (I992a3, b/203851459)
Poprawki błędów
- Zastosuj anulowanie w:
CoroutineScope
doListenableFuture
, jeśli używaszsuspendCancellableCoroutine
. (I77e63)
Wersja 2.7
Wersja 2.7.1
17 listopada 2021 r.
Aplikacja androidx.work:work-*:2.7.1
została zwolniona. Wersja 2.7.1 zawiera te zatwierdzenia.
Poprawki błędów
- Anulowania w
CoroutineScope
są przekazywane doListenableFuture
, jeśli korzystasz zsuspendCancellableCoroutine
. (I77e63) - Wyjątek jest zgłaszany natychmiast, gdy opóźnione żądania robocze zostaną oznaczone jako przyspieszone. bef1762
Wersja 2.7.0
13 października 2021 r.
Aplikacja androidx.work:work-*:2.7.0
została zwolniona. Wersja 2.7.0 zawiera te zatwierdzenia.
Ważne zmiany od wersji 2.6.0
WorkManager wprowadza nowy interfejs API
WorkRequest.Builder.setExpedited(...)
, aby pomóc w związku z ograniczeniami dotyczącymi usług działających na pierwszym planie w Androidzie 12.Gdy używany jest
setExpedited(...)
, WorkManager przekazuje dostęp do przyspieszonych zadań w JobScheduler na urządzeniach z Androidem 12, jednocześnie zapewniając zgodność wsteczną z poprzednimi wersjami Androida przez przekazanie dostępu usłudze działającej na pierwszym planie.
Wersja 2.7.0-rc01
29 września 2021 r.
Aplikacja androidx.work:work-*:2.7.0-rc01
została zwolniona. Wersja 2.7.0-rc01 zawiera te zatwierdzenia.
Ta wersja jest taka sama jak androidx.work:work-*:2.7.0-beta01
.
Wersja 2.7.0-beta01
1 września 2021 roku
Aplikacja androidx.work:work-*:2.7.0-beta01
została zwolniona. Wersja 2.7.0-beta01 zawiera te zatwierdzenia.
Nowe funkcje
- Ogranicz rywalizację z wieloma procesami SQLite podczas inicjowania zasobu WorkManager.
Zmiany w interfejsie API
- Usuń interfejsy API
@ExperimentalExpeditedWork
, ponieważ bazowe interfejsy API platformy dla Androida 12 (S) są stabilne. (Aosp/1792806)
Poprawki błędów
- Udostępnij lepszy komunikat o błędzie w przypadku przyspieszonych instancji roboczych, które nie implementują
getForegroundInfoAsync()
. (Aosp/1809376)
Wersja 2.7.0-alfa05
21 lipca 2021 r.
Aplikacja androidx.work:work-*:2.7.0-alpha05
została zwolniona. Wersja 2.7.0-alpha05 zawiera te zatwierdzenia.
Ta wersja zawiera też poprawki błędów z wersji WorkManager 2.6.0-beta02
.
Wersja 2.7.0-alfa04
2 czerwca 2021 r.
Aplikacja androidx.work:work-*:2.7.0-alpha04
została zwolniona.
Ta wersja zawiera również zmiany wprowadzone w wersji 2.6.0-beta01.
Zmiany w interfejsie API
- Interfejs
ListenableWorker.setForegroundAsync()
nie jest już wycofany. - W miarę możliwości zalecamy używanie interfejsu API
WorkRequest.Builder.setExpedited(...)
. Aby zapewnić lepszą obsługę w sytuacjach, gdy aplikacja nie podlega ograniczeniom usługi na pierwszym planie, deweloperzy mogą wykorzystać interfejsListenableWorker.setForegroundAsync()
API. - Jeśli funkcja
ListenableWorker.setForegroundAsync()
jest wywoływana, gdy aplikacja podlega ograniczeniom usługi na pierwszym planie, spowoduje to zgłoszenie błędu ForegroundServiceStartNotAllowedException.
Poprawki błędów
- Gdy zadania przyspieszone zostaną przełożone, nie będą już one przyspieszone. Stają się one zwykłymi zadaniami.
Wersja 2.7.0-alfa03
21 kwietnia 2021 r.
Aplikacja androidx.work:work-*:2.7.0-alpha03
została zwolniona. Wersja 2.7.0-alpha03 zawiera te zatwierdzenia.
Nowe funkcje
Z poziomu WorkManager
2.6.0-alpha02
: dodaje obsługę instancji roboczych, które mogą być uruchamiane w dowolnym procesie. (Iaf200)Z elementu WorkManager
2.6.0-alpha02
: dodano elementRemoteCoroutineWorker
, który jest implementacjąRemoteListenableWorker
, która może powiązać się z procesem zdalnym. (I30578)
Zmiany w interfejsie API
- Od WorkManagera
2.6.0-alpha02
:dodano obsługę ograniczenia sieciTEMPORARILY_UNMETERED
. (I08d5e) - Od WorkManagera
2.6.0-alpha02
:obsługa instancji roboczych wielu procesów dlasetProgressAsync()
. (Ib6d08) - W sekcji WorkManager
2.6.0-alpha02
:ustawWorkManagerInitializer
jako publiczny, aby inne obiektyandroidx.startup.Initializer
mogły używać ich jako zależności. (I5ab11).
Wersja 2.7.0-alfa02
10 marca 2021 r.
Aplikacja androidx.work:work-*:2.7.0-alpha02
została zwolniona. Wersja 2.7.0-alpha02 zawiera te zatwierdzenia.
Poprawki błędów
- Wyraźnie określ zmienność
PendingIntent
, aby naprawić awarię, która wystąpiła podczas kierowania na Androida 12. (b/180884673)
Wersja 2.7.0-alfa01
18 lutego 2021 r.
Aplikacja androidx.work:work-*:2.7.0-alpha01
została zwolniona. Wersja 2.7.0-alpha01 zawiera te zatwierdzenia.
Nowe funkcje
WorkManager wprowadza nowy interfejs API
WorkRequest.Builder.setExpedited(...)
, aby uwzględnić ograniczenia usługi na pierwszym planie w Androidzie 12.Aplikacje działające w tle nie mogą już uruchamiać usług na pierwszym planie. Dlatego, aby lepiej obsługiwać długotrwałą pracę, która wcześniej była powiązana z cyklem życia usługi na pierwszym planie, aplikacje mogą oznaczać obiekty
WorkRequest
jako expedited.Ten interfejs API zastępuje interfejsy API
setForegroundAsync(...)
/setForeground(...)
, które zostały wycofane.Gdy używany jest
setExpedited(...)
, WorkManager przekazuje dostęp do przyspieszonych zadań wJobScheduler
od Androida 12, jednocześnie zapewniając zgodność wsteczną z poprzednimi wersjami Androida przez przekazanie dostępu usługom na pierwszym planie.
Zmiany w interfejsie API
- Dodaj obsługę przyspieszonych działań typu
WorkRequest
.
Wersja 2.6.0
Wersja 2.6.0
1 września 2021 roku
Aplikacja androidx.work:work-*:2.6.0
została zwolniona. Wersja 2.6.0 zawiera te zatwierdzenia.
Ważne zmiany od wersji 2.5.0
WorkManager używa teraz
androidx.startup
do inicjowania WorkManagera. Jeśli w przeszłości użyto klasyContentProvider
do zainicjowania WorkManagera,tools:node="remove"
, wykonaj te czynności.<provider android:name="androidx.startup.InitializationProvider" android:authorities=\"${applicationId}.androidx-startup" android:exported="false" tools:node=\"merge"> <!-- If you are using androidx.startup to initialize other components --> <meta-data android:name="androidx.work.WorkManagerInitializer" android:value="androidx.startup" tools:node="remove" /> </provider>
<!-- If you want to disable android.startup completely. --> <provider android:name="androidx.startup.InitializationProvider" android:authorities="${applicationId}.androidx-startup" tools:node="remove" />
Dodano obsługę instancji roboczych, które mogą być uruchamiane w dowolnym procesie. (Iaf200)
Dodano element
RemoteCoroutineWorker
, który jest implementacją elementu RemoteListenableWorker, która może powiązać się z procesem zdalnym. (I30578)
Wersja 2.6.0-rc01
4 sierpnia 2021 r.
Aplikacja androidx.work:work-*:2.6.0-rc01
została zwolniona. Wersja 2.6.0-rc01 zawiera te zatwierdzenia.
Ta wersja jest taka sama jak androidx.work:work-*:2.6.0-beta02
.
Wersja 2.6.0-beta02
21 lipca 2021 r.
Aplikacja androidx.work:work-*:2.6.0-beta02
została zwolniona. Wersja 2.6.0-beta02 zawiera te zatwierdzenia.
Poprawki błędów
- Usługa
RemoteWorkManager
prawidłowo usuwa teraz powiązanie z polemRemoteWorkManagerService
, co umożliwia prawidłowe czyszczenie pamięciRemoteWorkManagerService
. aosp/1730694 - Usługa
RemoteListenableWorker
prawidłowo usuwa teraz powiązanie z polemRemoteWorkerService
, co umożliwia prawidłowe czyszczenie pamięciRemoteWorkerService
. aosp/1743817 ForceStopRunnable
działa teraz tylko w głównym procesie aplikacji. Jest to optymalizacja, która pozwala uniknąć rywalizacji o zasoby w przypadku aplikacji korzystających z wielu procesów. aosp/1749180, aosp/1761729
Wersja 2.6.0-beta01
2 czerwca 2021 r.
Aplikacja androidx.work:work-*:2.6.0-beta01
została zwolniona. Wersja 2.6.0-beta01 zawiera te zatwierdzenia.
Ta wersja zawiera kilka drobnych ulepszeń w dokumentacji. Wersja jest zasadniczo taka sama jak 2.6.0-alfa02.
Wersja 2.6.0-alfa02
21 kwietnia 2021 r.
Aplikacja androidx.work:work-*:2.6.0-alpha02
została zwolniona. Wersja 2.6.0-alpha02 zawiera te zatwierdzenia.
Nowe funkcje
Dodaje obsługę instancji roboczych, które mogą być uruchamiane w dowolnym procesie. (Iaf200)
Dodano element
RemoteCoroutineWorker
, który jest implementacjąRemoteListenableWorker
, która może powiązać się z procesem zdalnym. (I30578)
Zmiany w interfejsie API
- Dodano obsługę ograniczenia sieci
TEMPORARILY_UNMETERED
. (I08d5e) - Obsługa instancji roboczych wieloprocesowych w usłudze
setProgressAsync()
. (Ib6d08) - Udostępnij plik
WorkManagerInitializer
publicznie, aby inne obiektyandroidx.startup.Initializer
mogły używać ich jako zależności. (I5ab11).
Wersja 2.6.0-alfa01
24 marca 2021 r.
Aplikacja androidx.work:work-*:2.6.0-alpha01
została zwolniona. Wersja 2.6.0-alpha01 zawiera te zatwierdzenia.
Nowe funkcje
WorkManager
do inicjowania WorkManagera używa terazandroidx.startup
. Wcześniej zajmował się tym użytkownikandroidx.work.impl.WorkManagerInitializer
. (Aosp/1608813)Jeśli w przeszłości był używany
tools:node="remove"
ContentProvider
cykl życia procesu używany do inicjowania cyklu życia procesu w przeszłości, musisz wykonać te czynności.<provider android:name="androidx.startup.InitializationProvider" android:authorities=\"${applicationId}.androidx-startup" android:exported="false" tools:node=\"merge"> <!-- If you are using androidx.startup to initialize other components --> <meta-data android:name="androidx.work.impl.WorkManagerInitializer" android:value="androidx.startup" tools:node="remove" /> </provider>
(lub)
<!-- If you want to disable android.startup completely. --> <provider android:name="androidx.startup.InitializationProvider" android:authorities="${applicationId}.androidx-startup" tools:node="remove"> </provider>
Zmiany w interfejsie API
- Dodaj interfejs API
Result.getOutputData()
, który zwracaoutputData
obiektu ListenableWorker. (Ie51e3).
Poprawki błędów
- Dodaj obejście błędu OEM, który powoduje zgłoszenie błędu
SecurityException
podczas korzystania z interfejsów APIAlarmManager
. (Aosp/1587518)
Wersja 2.5.0
Wersja 2.5.0
27 stycznia 2021 r.
Aplikacja androidx.work:work-*:2.5.0
została zwolniona. Wersja 2.5.0 zawiera te zatwierdzenia.
Ważne zmiany od wersji 2.4.0
- Nowy artefakt
:work:work-multiprocess
dla aplikacji, które korzystają z wielu procesów. Pozwala to zwiększyć wydajność, ponieważ łączy harmonogram żądań pracy w jeden proces.- Aby użyć funkcji
work-multiprocess
, zdefiniuj zależność:implementation "androidx.work:work-multiprocess:2.5.0"
- Wyznacz proces podstawowy przy użyciu metody Configuration.Builder.setDefaultProcessName(String).
- Jeśli używasz usługi
work-multiprocess
, chcesz też używać narzędzia RemoteWorkManager do zarządzania urządzeniamiWorkRequest
. RemoteWorkManager zawsze kontaktuje się z wyznaczonym procesem. Algorytm szeregowania w procesie działa też w wyznaczonym procesie.
- Aby użyć funkcji
- Czasami
ActivityManager
nie może utworzyć instancjiJobService
, aby uruchomić zadanie. W efekcie podstawowe zadanie jest pomijane z powodu błędu platformy.WorkManager
gwarantuje teraz, że istnieją zadania zapasowe dla każdegoWorkRequest
podczas inicjowaniaApplication
przez uzgadnianie zadań. Znacznie zwiększa to niezawodność wykonywania zadań. (b/172475041, aosp/1489577) WorkManager
ogranicza wzrost bazy danych, skracając czas buforowania, któryWorkRequest
s są śledzone po zakończeniuWorkRequest
. Poprzedni czas trwania wyniósł7
dni. Skrócono do1
dnia + czas trwania keepResultsForAtLeast. (Aosp/1419708)TestListenableWorkerBuilder
obsługuje teraz zmodyfikowaną klasę o rozszerzeniuListenableWorker
, aby ułatwić testowanie. (Aosp/1443299, b/169787349)- Inspektor WorkManager jest teraz dostępny podczas korzystania z Android Studio Arctic Fox.
Wersja 2.5.0-rc01
13 stycznia 2021 r.
Aplikacja androidx.work:work-*:2.5.0-rc01
została zwolniona. Wersja 2.5.0-rc01 zawiera te zatwierdzenia.
Poprawki błędów
- Naprawiono błąd, który powodował, że podczas korzystania z interfejsu API opartego na
WorkQuery
atrybutgetWorkInfosLiveData
nie był prawidłowo unieważniany po zaktualizowaniu elementów. (Aosp/1540566, b/173769028) - Naprawiliśmy błąd polegający na tym, że w rzadkich przypadkach transakcje z bazą danych nie były oznaczane jako udane. Powoduje to problemy na niektórych urządzeniach Motorola. (Aosp/1535368, b/175944460)
- Naprawiliśmy błąd polegający na ignorowaniu
NoSuchElementException
podczas próby usunięcia powiązania z niedziałającym procesem. (Aosp/1530589) - Ulepsz
ConstraintTrackingWorker
, aby zatrzymywał interfejsListenableWorker
tylko wtedy, gdy nie został jeszcze zatrzymany. (Aosp/1496844, b/172946965) - Zaktualizuj biblioteki androidx.work, aby kierować je na język Java 8 (Ibd2f2)
Wersja 2.5.0-beta02
Grudzień 2, 2020
Aplikacja androidx.work:work-*:2.5.0-beta02
została zwolniona. Wersja 2.5.0-beta02 zawiera te zatwierdzenia.
Poprawki błędów
- Naprawiliśmy błąd w
androidx.work:work-multiprocess
, który powodował, że usługa WorkManager nieumyślnie blokowała wywołujący wątek podczas próby powiązania ze wskazanym procesem. (Aosp/1475538) - Naprawiono błąd, który powodował, że żądania
PeriodicWorkRequest
nie były prawidłowo uzgadniane. (b/172475041, aosp/1489577) - Dodaliśmy obejście błędu związanego z platformą podczas zatrzymywania usługi na pierwszym planie podczas korzystania z interfejsów API
setForeground*
. (b/170924044, aosp/1489901)
Wersja 2.5.0-beta01
28 października 2020 r.
Aplikacja androidx.work:work-*:2.5.0-beta01
została zwolniona. Wersja 2.5.0-beta01 zawiera te zatwierdzenia.
Nowe funkcje
WorkManager
automatycznie ogranicza liczbęWorkRequest
s, które może odebrać algorytm szeregowania w procesie. Żądania są nadal wykonywane na mocy nakazu FIFO. (Aosp/1455228)WorkManager
próbuje przywrócić magazyn danych aplikacji w złym stanie. (Aosp/1463103)
Poprawki błędów
- Gdy
ListenableWorker
zostaną przerwane, natychmiast oznacz je jakoENQUEUED
, aby można je było później zmienić. (Aosp/1455618, b/170273988)
Wersja 2.5.0-alfa03
14 października 2020 r.
Aplikacja androidx.work:work-*:2.5.0-alpha03
została zwolniona. Wersja 2.5.0-alpha03 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Typy
TestListenableWorkerBuilder
iTestWorkerBuilder
nie korzystają z nieprzetworzonych typów. (I883ad, b/169787349)
Poprawki błędów
- Użyj parametru
ApplicationInfo
, aby określić nazwę domyślnego procesu aplikacji. (b/168716641, aosp/1429950) - Popraw reguły widoczności elementów
RemoteWorkManager
iRemoteWorkContinuation
. Te interfejsy API nie są już oznaczone jako@Restricted
. (Aosp/1432091) - Popraw reguły ProPard dla:
:work:work-multiprocess
. (Aosp/1432091) - Usprawnij cykle życia powiadomień w przypadku długotrwałych zadań powiązanych z usługą na pierwszym planie. (b/168502234, aosp/1431331)
Wersja 2.5.0-alfa02
16 września 2020 roku
Aplikacja androidx.work:work-*:2.5.0-alpha02
została zwolniona. Wersja 2.5.0-alpha02 zawiera te zatwierdzenia.
Nowe funkcje
- Dodaj interfejs API do WorkQuery, aby móc używać interfejsów
id
do wysyłania zapytań o elementyWorkInfo
. (Aosp/1412372, b/157335295) - WorkManager lepiej obsługuje aplikacje, które używają wielu procesów przy użyciu nowego artefaktu (
androidx.work:work-multiprocess:*
). Pomaga on rozwiązać kilka problemów, z którymi mają do czynienia duże aplikacje:- Zwykle należy go zainicjować w każdym procesie aplikacji. Nie jest to świetna sprawa, ponieważ rośnie rywalizacja o SQLite, co z kolei powoduje inne problemy. WorkManager ma teraz nowe interfejsy API, których można użyć do wyznaczenia głównego procesu aplikacji za pomocą
Configuration#setDefaultProcessName(processName)
.processName
to w pełni kwalifikowana nazwa procesu, która wygląda jakpackageName:processName
(np.com.example:remote
). - Zestaw nowych interfejsów API: od
RemoteWorkManager
iRemoteWorkContinuation
do żądań roboczychenqueue
,cancel
iquery
. Te interfejsy API nie obejmują wariantówLiveData
, które pozwalają uniknąć rywalizacji dotyczącej SQLite między wieloma procesami. Wszystkie połączenia z numeramienqueue
,cancel
iquery
są przekierowywane do procesu aplikacjiprimary
przy użyciu AIDL, który zwraca poziomListenableFuture
. (aosp/1392657, aosp/1411210, aosp/1412215, aosp/1417713)
- Zwykle należy go zainicjować w każdym procesie aplikacji. Nie jest to świetna sprawa, ponieważ rośnie rywalizacja o SQLite, co z kolei powoduje inne problemy. WorkManager ma teraz nowe interfejsy API, których można użyć do wyznaczenia głównego procesu aplikacji za pomocą
Zmiany w interfejsie API
- WorkManager bardziej agresywnie zmniejsza ukończone zadania
WorkRequest
, które nie mają niekompletnych zależności. Czas trwania bufora zmieniono z7
dni na1
dzień. (Aosp/1419708)
Poprawki błędów
- WorkManager obecnie proaktywnie uzgadnia zadania, aby zadania
WorkRequest
iJobScheduler
były synchronizowane po zainicjowaniuWorkManager
. (Aosp/1412794, b/166292069)
Wersja 2.5.0-alfa01
19 sierpnia 2020 r.
Aplikacja androidx.work:work-*:2.5.0-alpha01
została zwolniona. Wersja 2.5.0-alpha01 zawiera te zatwierdzenia.
Nowe funkcje
- Zmiany w wewnętrznych interfejsach API, które pozwolą nam udostępniać lepsze narzędzia w
WorkManager
. Wkrótce podamy więcej informacji na ten temat.
Poprawki błędów
- Obsługa
SecurityException
podczas śledzenia stanu sieci na niektórych urządzeniach. (Aosp/1396969)
Wkład z zewnątrz
- Popraw dokumentację dotyczącą
ArrayCreatingInputMerger
od Zac Sweers (github/43).
Wersja 2.4.0
Wersja 2.4.0
22 lipca 2020 r.
Aplikacja androidx.work:work-*:2.4.0
została zwolniona. Wersja 2.4.0 zawiera te zatwierdzenia.
Ważne zmiany od wersji 2.3.0
- Algorytm szeregowania w procesie
WorkManager
ma teraz większe możliwości. Wcześniej w ramach procesuScheduler
brane pod uwagę były tylko te zadania, które nie były opóźnione i które nie zostały spełnione. Teraz algorytm szeregowania w procesie śledzi żądaniaWorkRequest
, które mogą być wykonywane w przyszłości, w tym PeriodicWorkRequests.Scheduler
w procesie również nie przestrzega limitów harmonogramu (ale nadal jest ograniczony do rozmiaru zasobuExecutor
używanego przez WorkManager). Oznacza to, że aplikacja może teraz wykonywać znacznie więcej żądań WorkRequests, gdy działa na pierwszym planie. Aby zarządzać wykonaniem opóźnionych prac na pierwszym planie,WorkManager
wprowadza również nową konfigurowalną wersjęRunnableScheduler
. (Aosp/1185778) - WorkManager obsługuje teraz język RxJava 3. Aby używać kodu RxJava 3, musisz uwzględnić tę zależność:
implementation "androidx.work:work-rxjava3:2.4.0"
. (Aosp/1277904) - Dodano możliwość wysyłania zapytań dotyczących
WorkInfo
przy użyciuWorkQuery
. Jest to przydatne, gdy deweloperzy chcą wysyłać zapytania doWorkInfo
za pomocą kombinacji wielu atrybutów. Więcej informacji znajdziesz tutaj:WorkQuery.Builder.fromStates(...)
,WorkQuery.Builder. fromTags(...)
iWorkQuery.Builder.fromUniqueWorkNames(...)
. (Aosp/1253230, b/143847546) Dodaj możliwość wysyłania żądań informacji diagnostycznych do
WorkManager
za pomocą:adb shell am broadcast -a "androidx.work.diagnostics.REQUEST_DIAGNOSTICS" -p "<your_app_package_name>"
Znajdziesz tam wiele przydatnych informacji, w tym:
- Żądania robocze, które zostały ukończone w ciągu ostatnich 24 godzin.
- Żądania robocze, które są obecnie URUCHOMIONE.
- Zaplanowane żądania robocze. (Aosp/1235501)
Dodaj atrybut
ExistingWorkPolicy.APPEND_OR_REPLACE
, który jest podobny do metodyAPPEND
, ale zastępuje łańcuch, w którym wymagania wstępne zostały anulowane lub nie zostały spełnione. (b/134613984, aosp/1199640)Daj możliwość dodania niestandardowego elementu
RunnableScheduler
, aby śledzić żądania WorkRequest, które będą musiały zostać wykonane w przyszłości. Jest ona używana przez algorytm szeregowania w procesie. (Aosp/1203944)W przypadku używania
DelegatingWorkerFactory
dodaj obsługę dynamicznego dodawania fabryk, do których chcesz przekazać dostęp. (b/156289105, aosp/1309745)Dokładniej dostosuj śledzenie pod kątem ograniczeń typu
BATTERY_NOT_LOW
do platformy. (Aosp/1312583)Algorytm szeregowania w procesie używa teraz lepszych interfejsów API do określania nazwy procesu. Pozwala to lepiej obsługiwać aplikacje korzystające z wielu procesów. (Aosp/1324732)
Nowe reguły Lint, które wymuszają:
- Właściwy atrybut
foregroundServiceType
podczas korzystania z interfejsów APIsetForegroundAsync()
. (b/147873061, aosp/1215915) - Podaj identyfikatory JobScheduler, których usługa WorkManager ma używać podczas bezpośredniego używania interfejsów JobService API. aosp/1223567
- Dodaliśmy nową regułę lintowania, która sprawia, że
ListenableWorker
implementacje przy korzystaniu z domyślnej wartościWorkerFactory
mają teraz wartośćpublic
. (Aosp/1291262)
- Właściwy atrybut
Połączenia z numerem
setForegroundAsync()
, które nie zostaną ukończone przed ukończeniem zadaniaListenableWorker
, będą teraz sygnalizowane przezIllegalStateException
na zwróconymListenableFuture
. (Aosp/1262743)Popraw błąd, który sprawia, że interfejs
ForegroundService
nie jest zatrzymywany po przerwaniu działania interfejsuWorker
na pierwszym planie. (b/155579898, aosp/1302153)Popraw błąd, w wyniku którego
WorkManager
próbuje wykonać wiele instancji obiektuWorker
powiązanego z usługą działającej na pierwszym planie (b/156310133, aosp/1309853)
Wersja 2.4.0-rc01
24 czerwca 2020 r.
Aplikacja androidx.work:work-*:2.4.0-rc01
została zwolniona. Wersja 2.4.0-rc01 zawiera te zatwierdzenia.
Poprawki błędów
- Algorytm szeregowania w procesie używa teraz lepszych interfejsów API do określania nazwy procesu. Pozwala to lepiej obsługiwać aplikacje korzystające z wielu procesów. (Aosp/1324732)
Wersja 2.4.0-beta01
20 maja 2020 r.
Opublikowano androidx.work:work-gcm:2.4.0-beta01
, androidx.work:work-runtime:2.4.0-beta01
, androidx.work:work-runtime-ktx:2.4.0-beta01
, androidx.work:work-rxjava2:2.4.0-beta01
i androidx.work:work-testing:2.4.0-beta01
. Wersja 2.4.0-beta01 zawiera te zatwierdzenia.
Poprawki błędów
- Popraw błąd, który sprawia, że interfejs
ForegroundService
nie jest zatrzymywany po przerwaniu działania interfejsuWorker
na pierwszym planie. (b/155579898, aosp/1302153) - Popraw błąd, w którym
WorkManager
próbuje wykonać wiele instancji obiektuWorker
powiązanego z usługą działającej na pierwszym planie (b/156310133, aosp/1309853) - W przypadku używania
DelegatingWorkerFactory
dodaj obsługę dynamicznego dodawania fabryk, do których chcesz przekazać dostęp. (b/156289105, aosp/1309745) - Dokładniej dostosuj śledzenie pod kątem ograniczeń typu
BATTERY_NOT_LOW
do platformy. (Aosp/1312583)
Wersja 2.4.0-alfa03
29 kwietnia 2020 r.
Aplikacja androidx.work:work-*:2.4.0-alpha03
została zwolniona. Wersja 2.4.0-alpha03 zawiera te zatwierdzenia.
Nowe funkcje
- WorkManager obsługuje teraz język RxJava 3. Aby używać kodu RxJava 3, musisz uwzględnić tę zależność:
implementation "androidx.work:work-rxjava3:2.4.0-alpha03"
. (Aosp/1277904) - Dodaliśmy nową regułę lintowania, która sprawia, że
ListenableWorker
implementacje przy korzystaniu z domyślnej wartościWorkerFactory
mają teraz wartośćpublic
. (Aosp/1291262)
Zmiany w interfejsie API
- Wywołanie
setProgressAsync()
po zakończeniu wykonywania koduListenableWorker
będzie teraz sygnalizowałoException
przezListenableFuture
. (Aosp/1285494) WorkQuery.Builder
jest teraz oznaczony jakofinal
. (Aosp/1275037)- Zmieniono nazwy metod fabrycznych w
WorkQuery.Builder
withStates
,withTags
iwithUniqueWorkNames
nafromStates
,fromTags
ifromUniqueWorkNames
. (Aosp/1280287)
Poprawki błędów
- Ignoruj
SecurityException
przy śledzeniu stanu sieci urządzenia. (b/153246136, aosp/1280813)
Wersja 2.4.0-alfa02
1 kwietnia 2020 r.
Aplikacja androidx.work:work-*:2.4.0-alpha02
została zwolniona. Wersja 2.4.0-alpha02 zawiera te zatwierdzenia.
Nowe funkcje
- Dodano nową regułę Lint, która ostrzega, gdy
WorkRequest
wymaga zarówno zasadyConstraints.setRequiresCharging(...)
, jak iConstraints.setRequiresDeviceIdle(...)
. Niektóre urządzenia nigdy się nie ładują i są nieaktywne. W związku z tym żądania tego rodzaju byłyby uruchamiane rzadziej, niż oczekiwano. (Aosp/1253840)
Zmiany w interfejsie API
Dodano możliwość wysyłania zapytań dotyczących
WorkInfo
przy użyciuWorkQuery
. Jest to przydatne, gdy deweloperzy chcą wysyłać zapytania doWorkInfo
za pomocą kombinacji wielu atrybutów. Więcej informacji znajdziesz tutaj:WorkQuery.Builder withStates(...)
,WorkQuery.Builder withTags(...)
iWorkQuery.Builder withUniqueWorkNames(...)
. (Aosp/1253230, b/143847546)Połączenia z numerem
setForegroundAsync()
, które nie zostaną ukończone przed ukończeniem zadaniaListenableWorker
, będą teraz sygnalizowane przezIllegalStateException
na zwróconymListenableFuture
. (Aosp/1262743)
Poprawki błędów
- Naprawiliśmy regułę lintowania, która sprawdza nieprawidłowe czasy trwania interwałów
PeriodicWorkRequest
s. (Aosp/1254846, b/152606442)
Wersja 2.4.0-alfa01
4 marca 2020 r.
Aplikacja androidx.work:work-*:2.4.0-alpha01
została zwolniona. Wersja 2.4.0-alpha01 zawiera te zatwierdzenia.
Nowe funkcje
Algorytm szeregowania w procesie
WorkManager
ma teraz większe możliwości. Wcześniej algorytm szeregowania w procesie brał pod uwagę tylko wykonanie zadań, które nie były opóźnione i których ograniczenia były spełnione. Teraz algorytm szeregowania w procesie śledzi parametryWorkRequest
, które mogą być wykonywane w przyszłości, w tymPeriodicWorkRequest
. Algorytm szeregowania w procesie nie przestrzega też limitów harmonogramu (ale nadal jest ograniczony do rozmiaruExecutor
używanego przez WorkManager). Oznacza to, że aplikacja może teraz wykonywać znacznie więcej zadańWorkRequest
, gdy działa na pierwszym planie. (Aosp/1185778)Dodaliśmy możliwość wysyłania żądań informacji diagnostycznych z WorkManagera za pomocą
adb shell am broadcast -a "androidx.work.diagnostics.REQUEST_DIAGNOSTICS" -p "<your_app_package_name>"
. Znajdziesz tam wiele przydatnych informacji, w tym:- Żądania robocze, które zostały ukończone w ciągu ostatnich 24 godzin.
- Żądania robocze, które są obecnie URUCHOMIONE.
- Zaplanowane żądania robocze. (Aosp/1235501)
Nowe reguły Lint, które wymuszają:
- Właściwy atrybut
foregroundServiceType
podczas korzystania z interfejsów APIsetForegroundAsync()
. (b/147873061, aosp/1215915) - Określam identyfikatory
JobScheduler
, którychWorkManager
ma używać podczas bezpośredniego używania interfejsów APIJobService
. (Aosp/1223567)
- Właściwy atrybut
Zmiany w interfejsie API
Dodaj sieć
ExistingWorkPolicy.APPEND_OR_REPLACE
, która jest podobna do metodyAPPEND
, ale zastąpi sieć, która anulowała lub nie spełniła wymagań wstępnych. (b/134613984, aosp/1199640)Zapewnij możliwość dodania niestandardowego elementu
RunnableScheduler
, aby śledzić zdarzeniaWorkRequest
, które trzeba wykonać w przyszłości. Jest ona używana przez algorytm szeregowania w procesie. (Aosp/1203944)
Poprawki błędów
- Wycofano właściwość
setProgress()
w metodzieRxWorker
, ponieważ wcześniej zwracała wartośćSingle<Void>
, która jest niemożliwa. Dodaliśmy nowy interfejs APIsetCompletableProgress()
, który zamiast tego zwraca wartośćCompletable
, oraz dodano nowe reguły Lint, które ułatwiają migrację do nowych interfejsów API. (b/150080946, aosp/1242665)
Wersja 2.3.4
Wersja 2.3.4
18 marca 2020 r.
Aplikacja androidx.work:work-*:2.3.4
została zwolniona. Wersja 2.3.4 zawiera te zatwierdzenia.
Poprawki błędów
- Naprawiliśmy błąd, który powodował uruchamianie wielu wystąpień długo trwających działów
Worker
po przekroczeniu 10-minutowego okna wykonywania. (Aosp/1247484, b/150553353) - Naprawiono lint
IssueRegistry
w usłudze WorkManager. Dziękujemy @ZacSweers ze Slacka za Twój wkład. (Aosp/1217923)
Wersja 2.3.3
Wersja 2.3.3
4 marca 2020 r.
Aplikacja androidx.work:work-*:2.3.3
została zwolniona. Wersja 2.3.3 zawiera te zatwierdzenia.
Poprawki błędów
- Naprawiono błąd, który powodował, że po przerwaniu wydarzenia
Worker
nie można było poprawnie zaplanować wydarzenia. (b/150325687, aosp/1246571)
Wersja 2.3.2
Wersja 2.3.2
19 lutego 2020 r.
androidx.work:work-*:2.3.2
zostało zwolnione. Wersja 2.3.2 zawiera te zatwierdzenia.
Poprawki błędów
- Rozwiązaliśmy problem, który powodował, że w rzadkich przypadkach aplikacja WorkManager przekracza limit 100 zadań w JobScheduler. (Aosp/1226859, b/149092520)
- Poprawiono warunek wyścigu w kontrolerze ConstraintController. (Aosp/1220100)
- Ulepszyliśmy cykl życia usługi na pierwszym planie w przypadku długo działających instancji roboczych. (Aosp/1226295)
- Ulepszyliśmy zarządzanie anulowaniem powiadomień w przypadku długotrwałych anulowania funkcji Worker on Worker. (Aosp/1228346)
Wersja 2.3.1
Wersja 2.3.1
5 lutego 2020 r.
Aplikacja androidx.work:work-*:2.3.1
została zwolniona. Wersja 2.3.1 zawiera te zatwierdzenia.
Poprawki błędów
- Lepiej zarządzaj cyklem życia elementów
Notification
w przypadku długotrwałych komponentów typuWorker
, które działają, gdy aktywny jest pierwszy planService
. (Aosp/1218539, b/147249312) WorkManager
wymaga teraz wersji stabilnejandroidx.sqlite:sqlite-framework:2.1.0
. (Aosp/1217729)- Dodano reguły lintowania, aby zapewnić, że
foregroundServiceType
jest określony wAndroidManifest.xml
, gdy używaszforegroundServiceType
wForegroundInfo
. (Aosp/1214207, b/147873061)
Wersja 2.3.0
Wersja 2.3.0
22 stycznia 2020 r.
Wersja androidx.work:work-*:2.3.0
została udostępniona bez zmian od 2.3.0-rc01
. Wersja 2.3.0 zawiera te zatwierdzenia.
Ważne zmiany od wersji 2.2.0
- Pomoc przy długotrwałej lub ważnej pracy dzięki
ListenableWorker#setForegroundAsync()
. - Obsługa postępu instancji roboczej w
ListenableWorker#setProgressAsync()
. - WorkManager dodaje teraz do biblioteki dodatkowe reguły lintowania, co pomaga wychwytywać błędy na wczesnym etapie.
Wersja 2.3.0-rc01
Styczeń 8, 2020
Aplikacja androidx.work:work-*:2.3.0-rc01
została zwolniona. Wersja 2.3.0-rc01 zawiera te zatwierdzenia.
Ta wersja jest taka sama jak w wersji 2.3.0-beta02
Poprawki błędów
- Artefakt
work-testing
definiuje teraz zależnośćapi
odwork-runtime-ktx
. (Aosp/1194410)
Wersja 2.3.0-beta02
18 grudnia 2019 r.
Aplikacja androidx.work:work-*:2.3.0-beta02
została zwolniona. Wersja 2.3.0-beta02 zawiera te zatwierdzenia.
Nowe funkcje
- Dodaliśmy lepszy komunikat o błędzie dotyczący niemożliwych do odzyskania wyjątków wyjątków SQLite. (Aosp/1185777)
- Dodano regułę lintowania, która zapewnia usunięcie dostawcy treści
androidx.work.impl.WorkManagerInitializer
zAndroidManifest.xml
podczas korzystania z inicjowania na żądanie. (Aosp/1167007) - Dodano ostrzeżenie o likwidacjach lin w sytuacji, gdy dla
PeriodicWorkRequest
zamiastenqueueUniquePeriodicWork()
jest używany językenqueue()
. (Aosp/1166032)
Zmiany w interfejsie API
ForegroundInfo
wymaga teraz określenianotificationId
, który ma być używany, gdy używaszListenableWorker.setForegroundAsync()
. Jest to niezbędna zmiana. Dzięki temu możesz uruchomić równolegle wiele długotrwałych komponentówWorker
.WorkManager
lepiej zarządza też czasami życia podanych elementówNotification
. (b/145473554, aosp/1181208, asop/1181216, asop/1183577)
Poprawki błędów
- Naprawiliśmy błąd w implementacji aplikacji AlarmManager, który powodował, że alarmy nie były prawidłowo czyszczone. (Aosp/1156444)
- Naprawiono błąd, który powodował, że pusta lista elementów
WorkRequest
powodowała utworzenie nieprawidłowego łańcuchaWorkContinuation
. (b/142835274, aosp/1157051)
Zmiany zależności
- WorkManager korzysta teraz z Pokoju 2.2.2.
Wersja 2.3.0-beta01
20 listopada 2019 r.
Aplikacja androidx.work:work-*:2.3.0-beta01
została zwolniona. Wersja 2.3.0-beta01 zawiera te zatwierdzenia.
Nowe funkcje
- Dodaliśmy nową regułę lintowania, która zapobiega błędom programistycznym spowodowanym nieprawidłową implementacją
androidx.work.Configuration.Provider
w przypadku inicjowania na żądanie. aosp/1164559
Wersja 2.3.0-alfa03
23 października 2019 r.
Aplikacja androidx.work:work-*:2.3.0-alpha03
została zwolniona. Wersja 2.3.0-alpha03 zawiera te zatwierdzenia.
Nowe funkcje
- Dodano interfejs API
WorkManager.createCancelPendingIntent()
, który ułatwia anulowanie komponentówWorkRequest
bez konieczności rejestrowania kolejnego komponentu wAndroidManifest.xml
. Ten interfejs API szczególnie ułatwia anulowanie działańWorkRequest
zNotification
. Planujemy połączyć go z nowymi interfejsami API działających na pierwszym planie w wersji 2.3.0. - WorkManager korzysta teraz ze stabilnej wersji
androidx.room:*:2.2.0
.
Zmiany w interfejsie API
- Nazwa
ForegroundInfo.getNotificationType()
została zmieniona naForegroundInfo.getForegroundServiceType()
, aby była bardziej spójna z interfejsami API platformy. (b/142729893, aosp/1143316)
Poprawki błędów
- Naprawiliśmy błąd spowodowany niepotrzebnym wywołaniem funkcji
setTransactionSuccessful()
poza transakcją. Zdarza się to w przypadku rzadkich migracji. (b/142580433, aosp/1141737)
Wersja 2.3.0-alfa02
9 października 2019 r.
Aplikacja androidx.work:work-*:2.3.0-alpha02
została zwolniona. Wersja 2.3.0-alpha02 zawiera te zatwierdzenia.
Nowe funkcje
- WorkManager obsługuje teraz długotrwałe lub ważne zadania, które powinny być podtrzymywane przez system operacyjny. Więcej informacji znajdziesz tutaj:
ListenableWorker#setForegroundAsync()
(lubCoroutineWorker#setForeground()
w przypadku Kotlin). (Aosp/1133636)
Zmiany w interfejsie API
- Nazwa interfejsu API
containsKey
wData
została zmieniona nahasKeyWithValueOfType
. Nazwa odpowiedniej metody rozszerzenia w bibliotecektx
również została zmieniona. (b/141916545)
Poprawki błędów
- Harmonogramy WorkManager działają prawidłowo, gdy zbliża się liczba limitów harmonogramu w kolejce
WorkRequest
. (Aosp/1105766) - WorkManager wywołuje metodę
ListenableWorker#onStopped()
tylko wtedy, gdy praca nie została jeszcze ukończona. (b/140055777) - WorkManager usuwa teraz informacje o postępach, gdy instancja robocza zostanie przerwana lub osiągnie swój stan terminala. (Aosp/1114572)
Data
ma teraz znacznie bardziej użytecznątoString()
reprezentację. (b/140945323)- Funkcja
Data
ma teraz lepszą metodęequals()
. Obsługuje również typdeepEquals
dla typuArray
. (b/140922528) - Usługa WorkManager przechowuje teraz wewnętrzną bazę danych i pliki ustawień w katalogu bez kopii zapasowych. (b/114808216)
Wersja 2.3.0-alfa01
22 sierpnia 2019 r.
Aplikacja androidx.work:work-*:2.3.September 5, 20190-alpha01
została zwolniona. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.
Nowe funkcje
- Użytkownicy
ListenableWorker
mogą teraz ustawiać postęp za pomocą interfejsu APIsetProgressAsync()
. WCoroutineWorker
dodano też odpowiedni interfejs APIsetProgress
obsługującysuspend
isetProgress
wRxWorker
, który zwracaSingle<Void>
. Dzięki tym nowym interfejsom API pracownicy mogą przekazywać informacje o postępach za pomocą interfejsuWorkInfo
, który ma odpowiedni interfejs APIgetProgress
. (b/79481554) Data
ma interfejs APIcontainsKey()
, który może służyć do sprawdzania, czy dane wejściowe funkcjiWorker
mają klucze o oczekiwanym typie. (b/117136838)Data
może być teraz serializowany za pomocąData.toByteArray()
iData.fromByteArray()
. Pamiętaj, że usługaData
nie gwarantuje obsługi wersji, więc nie należy jej utrzymywać ani używać na potrzeby IPC między aplikacjami. Można ich bezpiecznie używać tylko w wielu procesach w tej samej aplikacji.- Dodano możliwość określenia
InputMergerFactory
wConfiguration.setInputMergerFactory
. (b/133273159)
Zmiany w interfejsie API
- WorkManager zgłosi wystąpienie
IllegalStateException
, jeśliWorkerFactory
zwróci wystąpienieListenableWorker
, które zostało wcześniej wywołane. (b/139554406) - Aktualizacje dokumentacji dotyczącej anulowania usługi
ListenableFuture
i wywołania zwrotnegoonStopped()
wListenableWorker
. (b/138413671)
Poprawki błędów
- Algorytm szeregowania w procesie ignoruje teraz reguły
WorkRequest
z ograniczeniemidle
. Te prośby są teraz odbierane przez usługęJobScheduler
tylko wtedy, gdy urządzenie faktycznie toidle
. (Aosp/1089779) TestScheduler
teraz prawidłowo używa w testach określonego elementuExecutor
jako wewnętrznego wykonawcy zadania. (Aosp/1090749)
Wersja 2.2.0
Wersja 2.2.0
15 sierpnia 2019 r.
Aplikacja androidx.work:work-*:2.2.0
została zwolniona. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.
Ta wersja jest taka sama jak androidx.work:work-*:2.2.0-rc01
.
Ważne zmiany w wersji 2.2.0 z 2.1.0
androidx.work:work-gcm:2.2.0
to nowy artefakt Maven, który umożliwia używanie GCMNetworkManager jako algorytmu szeregowania, gdy Usługi Google Play są dostępne dla interfejsów API na poziomie 22. Jest to opcjonalna zależność, która pomaga zwiększyć niezawodność i wydajność przetwarzania w tle w starszych wersjach interfejsu API. Jeśli Twoja aplikacja korzysta z Usług Google Play, dodaj tę zależność do pliku Gradle, aby automatycznie uzyskać obsługę GCMNetworkManagera. Jeśli Usługi Google Play są niedostępne, aplikacja WorkManager będzie nadal używać aplikacji AlarmManager na starszych urządzeniach.
Wersja 2.2.0-rc01
30 lipca 2019 r.
Aplikacja androidx.work:work-*:2.2.0-rc01
została zwolniona. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.
Poprawki błędów
- Naprawiliśmy błąd w implementacji AlarmManagera, który powodował przedwczesne wyłączenie usługi, a w rzadkich przypadkach powodując błąd
RejectedExecutionException
. (Aosp/1092374) (b/138238197). - Dodaliśmy obejście problemu
NullPointerException
występującego podczas używania interfejsów APIJobScheduler
na niektórych urządzeniach. (Aosp/1091020) (b/138364061), (b/138441699)
Wersja 2.2.0-beta02
19 lipca 2019 r.
Aplikacja androidx.work:work-*:2.2.0-beta02
została zwolniona. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.
Poprawki błędów
- Usunięto niezamierzoną zależność w stylu Jacoco, która została wprowadzona w
2.2.0-beta01
.
Wersja 2.2.0-beta01
17 lipca 2019 r.
Aplikacja androidx.work:work-*:2.2.0-beta01
została zwolniona. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.
Nowe funkcje
androidx.work:work-gcm:2.2.0-beta01
to nowy artefakt Maven, który umożliwia używanie GCMNetworkManager jako algorytmu szeregowania, gdy Usługi Google Play są dostępne dla interfejsów API na poziomie 22. Jest to opcjonalna zależność, która zwiększa niezawodność i wydajność przetwarzania w tle w przypadku starszych wersji interfejsu API. Jeśli Twoja aplikacja korzysta z Usług Google Play, dodaj tę zależność do pliku Gradle, aby automatycznie uzyskać obsługę GCMNetworkManagera. Jeśli Usługi Google Play są niedostępne, aplikacja WorkManager będzie nadal używać aplikacji AlarmManager na starszych urządzeniach.
Poprawki błędów
- Poprawiono błąd
IllegalArgumentException
związany ze śledzeniem stanu sieci na tabletach Nvidia Shield K1. (Aosp/1010188)
Wersja 2.1.0
Wersja 2.1.0
11 lipca 2019 r.
Aplikacja androidx.work:work-*:2.1.0
została zwolniona. Ta wersja jest taka sama jak androidx.work:work-*:2.1.0-rc01
.
Ważne zmiany od wersji 2.0.1
work-runtime-ktx
wymaga teraz środowiska Java 8. Jeśli napotkasz jakieś problemy, możesz dodać dobuild.gradle
te informacje:kotlinOptions { jvmTarget = "1.8" }
- Dodano inicjalizację na żądanie dla WorkManagera, która spowoduje utworzenie zasobu WorkManager tylko wtedy, gdy się do niego odwołasz. b/127497100 Aby skonfigurować w projekcie inicjowanie na żądanie:
- Wyłącz automatyczny inicjator.
- Zaimplementuj
Configuration.Provider
w niestandardowym obiekcieApplication
. - Zmień wszystkie odwołania do
WorkManager.getInstance()
naWorkManager.getInstance(Context)
. W związku z tą zmianą wycofaliśmyWorkManager.getInstance()
. Zawsze bezpieczniej jest wywołać nowy zamiennikWorkManager.getInstance(Context)
, nawet jeśli nie inicjujesz na żądanie.
PeriodicWorkRequest
obsługuje teraz początkowe opóźnienia. Możesz użyć metodysetInitialDelay
wPeriodicWorkRequest.Builder
, aby ustawić początkowe opóźnienie. b/111404867- Dodaliśmy możliwość przekazywania dostępu do co najmniej 1 zarejestrowanego użytkownika
WorkerFactory
za pomocąDelegatingWorkerFactory
. b/131435993 - Dodaliśmy możliwość dostosowywania funkcji
Executor
, których używa WorkManager, aby prowadzić wewnętrzne procesy księgowe w usłudzeConfiguration.Builder.setTaskExecutor
. - Dodaliśmy możliwość tworzenia możliwych do przetestowania klas
Worker
iListenableWorker
przy użyciuTestWorkerBuilder
iTestListenableWorkerBuilder
w artefaktiework-testing
.- Pamiętaj, że
work-testing
pobiera teraz Kotlin jako zależność i domyślnie zawiera kilka rozszerzeń Kotlin.
- Pamiętaj, że
- Dodano liczbę prób uruchomienia do
WorkInfo
. b/127290461 - Typy
Data
mogą teraz przechowywać i pobierać bajty oraz tablice bajtów. NIE zmienia maksymalnego rozmiaru obiektówData
. - WorkManager korzysta teraz z usługi
Room 2.1.0
, która powinna rozwiązać niektóre problemy z bazą danych.
Wersja 2.1.0-rc01
27 czerwca 2019 r.
Aplikacja androidx.work:work-*:2.1.0-rc01
została zwolniona. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.
Poprawki błędów
- Naprawiono błąd, który powodował awarię aplikacji podczas wykonywania zadań z użyciem
JobScheduler
podczas tworzenia kopii zapasowej b/135858602.
Wersja 2.1.0-beta02
20 czerwca 2019 r.
Aplikacja androidx.work:work-*:2.1.0-beta02
została zwolniona. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.
Poprawki błędów
- Podczas tworzenia instancji
ListenableWorker
TestListenableWorkerBuilder
używa teraz poprawnego polaWorkerFactory
. b/135275844 - Naprawiono błąd, który powodował dryfy w oknach wykonywania zadań
WorkRequest
z powodu śmierci procesu. b/135272196
Wersja 2.1.0-beta01
13 czerwca 2019 r.
Aplikacja androidx.work:work-*:2.1.0-beta01
została zwolniona. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.
Poprawki błędów
- WorkManager korzysta teraz z usługi
Room 2.1.0
, która powinna rozwiązać niektóre problemy z bazą danych. - Usunięto część wejścia-wyjścia dysku startowego w wątku głównym.
- Usunięto potencjalne zakleszczenie w śledzeniu ograniczeń. b/134361006
- Z wyprzedzeniem anulowano nieprawidłowe zadania przypisane do WorkManagera. b/134058261
- Dodano wywołania obronne do interfejsów JobScheduler API dla wadliwie działających urządzeń.
Wersja 2.1.0-alfa03
5 czerwca 2019 r.
Aplikacja androidx.work:*:2.1.0-alpha03
została zwolniona.
Poprawki błędów
- Ulepszona dokumentacja systemów
PeriodicWorkRequest
. WorkManagerTestInitHelper
podczas testów używa teraz prawidłowego wykonawcy działającego w tle.- Poprawki błędów dotyczących SQLite występujących podczas obsługi dużych transakcji na niektórych urządzeniach. (b/130182503)
- Zależności WorkManagera są teraz bardziej szczegółowe. (b/133169148).
- Obejście błędów typowych dla OEM w implementacji funkcji
JobScheduler
podczas planowania zadań za pomocą WorkManagera. - Ulepszenia algorytmu szeregowania opartego na AlarmManager, które obejmują czas eksploatacji usługi, który wcześniej powodował rzadkie awarie. (b/133313734)
Wersja 2.1.0-alfa02
16 maja 2019 r.
Opublikowano wersję WorkManager 2.1.0-alfa02. Ta wersja zawiera kilka nowych interfejsów API.
Zmiany w interfejsie API
PeriodicWorkRequest
obsługuje teraz początkowe opóźnienia. Możesz użyć metodysetInitialDelay
wPeriodicWorkRequest.Builder
, aby ustawić początkowe opóźnienie. b/111404867Dodaliśmy możliwość przekazywania dostępu do co najmniej 1 zarejestrowanego użytkownika
WorkerFactory
za pomocąDelegatingWorkerFactory
. b/131435993Dodaliśmy możliwość dostosowywania funkcji
Executor
, których używa WorkManager, aby prowadzić wewnętrzne procesy księgowe w usłudzeConfiguration.Builder.setTaskExecutor
.Ulepszona dokumentacja dotycząca
WorkRequest.keepResultsForAtLeast
(b/130638001), inicjowania na żądanie iPeriodicWorkRequest.Builder
(b/131711394).
Wersja 2.1.0-alfa01
24 kwietnia 2019 r.
Opublikowano wersję WorkManager 2.1.0-alfa01. Ta wersja zawiera kilka nowych interfejsów API. Pamiętaj, że od tej wersji będą dostępne nowe funkcje, które nie zostaną przeniesione do wersji 1.x. Zalecamy przejście na wersję 2.x.
Zmiany w interfejsie API
- Dodano inicjalizację na żądanie dla WorkManagera, która spowoduje utworzenie zasobu WorkManager tylko wtedy, gdy się do niego odwołasz. b/127497100 Aby skonfigurować w projekcie inicjowanie na żądanie:
- Wyłącz automatyczny inicjator.
- Zaimplementuj
Configuration.Provider
w niestandardowym obiekcieApplication
. - Zmień wszystkie odwołania do
WorkManager.getInstance()
naWorkManager.getInstance(Context)
. W związku z tą zmianą wycofaliśmyWorkManager.getInstance()
. Zawsze bezpieczniej jest wywołać nowy zamiennikWorkManager.getInstance(Context)
, nawet jeśli nie inicjujesz na żądanie.
- Dodaliśmy możliwość tworzenia możliwych do przetestowania klas
Worker
iListenableWorker
przy użyciuTestWorkerBuilder
iTestListenableWorkerBuilder
w artefaktiework-testing
.- Pamiętaj, że
work-testing
pobiera teraz Kotlin jako zależność, ale domyślnie zawiera też kilka rozszerzeń Kotlin.
- Pamiętaj, że
- Dodano liczbę prób uruchomienia do
WorkInfo
. b/127290461 - Typy
Data
mogą teraz przechowywać i pobierać bajty oraz tablice bajtów. NIE zmienia maksymalnego rozmiaru obiektówData
. - Wycofano:
CoroutineWorker.coroutineContext
. To pole zostało nieprawidłowo wpisane jako poleCoroutineDispatcher
. Nie jest już potrzebne, ponieważ możesz samodzielnie otworzyć odpowiedni coroutineContext w treści funkcji zawieszania. - Parametry
RxWorker.createWork()
iRxWorker.getBackgroundScheduler()
są teraz oznaczone adnotacjami typu@NonNull
.
Wersja 2.0.1
Wersja 2.0.1
9 kwietnia 2019 r.
Prezentujemy WorkManager 2.0.1. Ta wersja jest taka sama jak 2.0.1-rc01.
Wersja 2.0.1-rc01
3 kwietnia 2019 r.
Udostępniono WorkManager 2.0.1-rc01. Ta wersja zawiera poprawki błędów. W przypadku użytkowników starszej wersji 1.x niektóre z tych zmian są też widoczne w 1.0.1-rc01.
Poprawki błędów
- Testy Robolectric działają teraz prawidłowo z WorkManagerem. b/122553577
- Naprawiliśmy awarię przypadków granicznych, w wyniku których śledzenie ograniczeń nie było czyszczone w interfejsach API używanych przed JobScheduler. b/129226383
- Naprawiono błąd
StackOverflowError
związany z długimi łańcuchami zadań. b/129091233 - Zaktualizowaliśmy dokumentację dotyczącą komponentów
PeriodicWorkRequest
, aby wskazać, że interfejs API 23 nie obsługuje czasu elastycznego. - Naprawiliśmy kilka uszkodzonych linków w dokumentacji Kotlin.
Wersja 2.0.0
Wersja 2.0.0
20 marca 2019 r.
Prezentujemy WorkManager 2.0.0. Ta wersja jest taka sama jak wersja 2.0.0-rc01 i jest stabilną wersją AndroidaX 1.0.0 z zależnościami AndroidaX. Zalecamy kierowanie na tę wersję, a nie na starsze wersje 1.x. Wszystkie aktywne aplikacje przeznaczone dla programistów w wersjach 2.x i 1.x będą otrzymywać poprawki krytycznych błędów tylko przez ograniczony czas.
Wersja 2.0.0-rc01
7 marca 2019 r.
Udostępniono WorkManager 2.0.0-rc01. Ta wersja jest taka sama jak wersja stabilna 1.0.0, ale ma zależności AndroidX. Zalecamy dodanie tej wersji, gdy wersja 2.0.0 będzie stabilna. Starsze wersje 1.x będą zawierać tylko kilka krytycznych poprawek. Wszystkie aktywne aplikacje będą kierowane na wersję 2.x.
Zależności sprzed AndroidaX
Dokumentacja: Java
Odlotowy
dependencies { def work_version = "1.0.1" // (Java only) implementation "android.arch.work:work-runtime:$work_version" // Kotlin + coroutines implementation "android.arch.work:work-runtime-ktx:$work_version" // optional - RxJava2 support implementation "android.arch.work:work-rxjava2:$work_version" // optional - Test helpers androidTestImplementation "android.arch.work:work-testing:$work_version" }
Kotlin
dependencies { val work_version = "1.0.1" // (Java only) implementation("android.arch.work:work-runtime:$work_version") // Kotlin + coroutines implementation("android.arch.work:work-runtime-ktx:$work_version") // optional - RxJava2 support implementation("android.arch.work:work-rxjava2:$work_version") // optional - Test helpers androidTestImplementation("android.arch.work:work-testing:$work_version") }
Wersja 1.0.1
Wersja 1.0.1
9 kwietnia 2019 r.
Prezentujemy WorkManager 1.0.1. Ta wersja jest taka sama jak 1.0.1-rc01.
Zdecydowanie zachęcamy użytkowników do przejścia na WorkManager 2.x, ponieważ gałąź 1.x będzie zawierać bardzo mało aktualizacji. Nie będą też publikowane nowe interfejsy API w wersji 1.x.
Wersja 1.0.1-rc01
2 kwietnia 2019 r.
Udostępniono WorkManager 1.0.1-rc01. Ta wersja zawiera poprawki błędów.
Poprawki błędów
- Testy Robolectric działają teraz prawidłowo z WorkManagerem. b/122553577
- Naprawiliśmy awarię przypadków granicznych, w wyniku których śledzenie ograniczeń nie było czyszczone w interfejsach API używanych przed JobScheduler. b/129226383
- Naprawiono błąd
StackOverflowError
związany z długimi łańcuchami zadań. b/129091233
Wersja 1.0.0
Wersja 1.0.0
5 marca 2019 r.
Jest to stabilna wersja 1.0.0 systemu WorkManager. Ta wersja WorkManagera jest taka sama jak wersja 1.0.0-rc02.
Wersja 1.0.0-rc02
21 lutego 2019 r.
To druga kandydaturę stabilnej wersji WorkManager 1.0.0. Ta wersja zawiera dwie poprawki błędów.
Poprawki błędów
Po awarii aplikacji harmonogramy
Worker
są teraz poprawnie zaplanowane. b/124546316Elementy
Worker
, które zwracają niesprawdzoną metodęException
, są teraz prawidłowo oznaczane jakoFAILED
i nie powodują już awarii procesu aplikacji.
Wersja 1.0.0-rc01
14 lutego 2019 r.
To jest kandydat do wydania stabilnej wersji WorkManager 1.0.0. Ta wersja zawiera jedną poprawkę błędu.
Poprawki błędów
- Implementacja oparta na usłudze AlarmManager prawidłowo obsługuje teraz okna
flex
dla żądań PeriodicWorkRequest. b/124274584
Wersja 1.0.0-beta05
6 lutego 2019 r.
Ta wersja zawiera poprawki błędów.
Poprawki błędów
- Naprawiono przypadek, w którym w interfejsie API 23 była używana funkcja
JobScheduler.getPendingJob(...)
. b/123893059 - Usunięto błąd
NullPointerException
na urządzeniach z Androidem 5.1 (poziom interfejsu API 22) lub niższym. b/123835104
Wersja 1.0.0-beta04
4 lutego 2019 r.
Ta wersja zawiera poprawki błędów.
Poprawki błędów
- Ulepszyliśmy planowanie PeriodicWork na potrzeby implementacji AlarmManager.
- Rozwiązaliśmy problem, który powodował, że aplikacja WorkManager nie mogła prawidłowo śledzić ograniczeń podczas korzystania z implementacji opartej na AlarmManager. b/123379508
- Rozwiązano problem, który powodował, że usługa WorkManager nie mogła ponawiać próby w wyniku śmierci procesu przy użyciu implementacji opartej na AlarmManager. b/123329850
- Naprawiliśmy przypadek, który powodował wyciek blokad uśpienia z usługi WorkManager przy użyciu implementacji opartej na AlarmManager.
Wersja 1.0.0-beta03
25 stycznia 2019 r.
Ta wersja zawiera poprawki błędów.
Poprawki błędów
- Wprowadziliśmy regresję
1.0.0-beta02
, która w niektórych sytuacjach sprawiała, że zadania nie były wykonywane poprawnie. b/123211993 - Naprawiono problem polegający na tym, że praca nieprawidłowo uznawała czas do ponowienia. b/122881597
- Usunięto błąd
ConcurrentModificationException
na urządzeniach z Androidem 5.1 (API) lub starszym. To kontynuacja poprawki w aplikacji1.0.0-beta02
. b/121345393 - Dodaliśmy
exported=false
w przypadku niektórych komponentów w naszym pliku manifestu, w których brakuje tej adnotacji. - Informacje o tym, jak WorkManager współpracuje z systemem operacyjnym, znajdziesz w dokumentacji na poziomie pakietu.
Wersja 1.0.0-beta02
15 stycznia 2019 r.
Ta wersja zawiera poprawki błędów.
Poprawki błędów
- Naprawiono przypadek skrajny, w którym na urządzeniach z Androidem 6.0 (poziom interfejsu API 23) okresowa praca mogła być wykonywana więcej niż raz w danym okresie. b/121998363
- Usunięto błąd
ConcurrentModificationException
na urządzeniach z Androidem 5.1 (poziom interfejsu API 22) lub starszym. b/121345393 - Naprawiliśmy błędne wykonywanie zadań, gdy ograniczenia nie były spełnione na urządzeniach z Androidem 5.1 (poziom interfejsu API 22) lub niższym. b/122578012
- Zoptymalizowana obsługa zadań wykonywanych w celu przyspieszenia w niektórych przypadkach skrajnych. b/122358129
- Dodaliśmy zmianę, która uwzględniała potencjalne warunki wyścigu w wielu wystąpieniach obiektu
LiveData
używanego przez WorkManager. - Przeniesiono do użycia zależności
Room
1.1.1
zamiast1.1.1-rc01
. Te wersje są identyczne. b/122578011
Wersja 1.0.0-beta01
19 grudnia 2018 r.
Ta wersja nie wprowadza żadnych zmian w interfejsie API. Od tej pory aplikacja WorkManager powinna pozostać stabilna do czasu następnej wersji, chyba że wystąpi problem krytyczny. Ta wersja zawiera poprawki błędów.
Poprawki błędów
- Elementy podrzędne, które zostały wcześniej anulowane, nie będą już uruchamiane. b/120811767
- Prawidłowo zainicjowane klasy logowania (wyświetlane głównie podczas testów).
Wersja 1.0.0-alfa13
12 grudnia 2018 r.
Ta wersja zawiera niewielką zmianę w interfejsie API, która będzie przydatna dla niektórych użytkowników aplikacji Kotlin.
Zmiany w interfejsie API
- Użytkownik
androidx.work.Result
został przeniesiony do klasy wewnętrznej użytkownikaListenableWorker
. Zapobiega to konfliktom refaktoryzacji z klasąResult
najwyższego poziomu Kotlin. Jest to niezgodna zmiana w interfejsie API. b/120564418
Najnowsze zmiany w interfejsie API
- Użytkownik
androidx.work.Result
został przeniesiony do klasy wewnętrznej użytkownikaListenableWorker
.
Wersja 1.0.0-alfa12
5 grudnia 2018 r.
Ta wersja zawiera zmiany w interfejsie API, które naruszają zasady. Zapoznaj się z sekcją Breaking API changes poniżej. Prawdopodobnie zostanie ona opublikowana jako pierwsza wersja beta. alpha12
zawiera też obszerne aktualizacje dokumentacji.
Zmiany w interfejsie API
- Nowy artefakt:
work-rxjava2
, przedstawia:RxWorker
. To jestListenableWorker
, który wymaga podania wartościSingle<Payload>
. - Obsługa usługi JobDispatcher w Firebase została wycofana z powodu zbliżającego się jej wycofania. Oznacza to, że podczas przechodzenia do wersji beta artefakt
work-firebase
nie będzie już aktualizowany. W przyszłości rozważymy dodanie takiego rozwiązania. - Łączono:
Payload
w:Result
.Result
jest teraz „zaklejoną klasą” z 3 konkretnymi implementacjami, które można uzyskać za pomocąResult.success()
(lubResult.success(Data)
),Result.failure()
(lubResult.failure(Data)
) iResult.retry()
. Wyniki z Twojego źródła danych (ListenableFuture
) dają teraz wynikResult
zamiastPayload
. MetodyWorker
nie mają metod pobierania ani ustawiania dla danych wyjściowychData
. Jest to niezbędna zmiana. - Dodano atrybuty
Constraints.Builder.setTriggerContentMaxDelay(long, TimeUnit)
iConstraints.Builder.setTriggerContentUpdateDelay(long, TimeUnit)
oraz warianty, aby lepiej obsługiwać identyfikatory URI treści powoli aktywujące się. b/119919774 - Dodano
WorkRequest.Builder.setBackoffCriteria(BackoffPolicy, Duration)
wariant. Ta metoda wymaga interfejsu API 26. - Dodano metody rozszerzenia Kotlin:
Operation.await()
iListenableFuture.await()
. - Nazwa elementu
Operation.getException()
została zmieniona naOperation.getThrowable()
. Jest to niezbędna zmiana. - Klasa
ContentUriTriggers
i metody odwołujące się do niej nie są już dostępne publicznie. Jest to niezbędna zmiana. - Aby uprościć interfejs API, usunięto pozostałe metody varargs w funkcjach
WorkManager
,WorkContinuation
iOneTimeWorkRequest
. Aby rozwiązać problemy z kompilacją, możesz opakować istniejące zmienne Vararg za pomocą atrybutuArrays.asList(...)
. Nadal uwzględniamy wersje z jednym argumentem w każdej metodzie. Jest to niezbędna zmiana. - Usunięto
WorkContinuation.combine(OneTimeWorkRequest, *)
warianty. Prezentował interfejs API niejasny, a dotychczasowe metodycombine
są bardziej zrozumiałe. Jest to niezbędna zmiana.
Poprawki błędów
- Implementacje przed Marshmallow są teraz bardziej niezawodne, jeśli chodzi o reagowanie na śmierć procesu w przypadku już wykonywanego zadania.
- Funkcja
LiveData
obserwowana przezobserveForever
jest śledzona przez WorkManager. To jest wsteczna poprawka z Biblioteki pokoi. b/74477406 Data.Builder.build()
zgłasza teraz wyjątek, jeśli zserializowany obiekt przekracza swój maksymalny rozmiar. Wcześniej zdarzało się to tylko w wątku w tle, w którym nie można było prawidłowo go obsłużyć.- Dalsze odróżnianie zadań zatrzymane i anulowane. W okresie
ListenableWorker.onStopped()
getWorkInfoById()
zwróciWorkInfo
zCANCELLED
State
. - Traktuj
null
Result
jako niepowodzenia wListenableWorker
. b/120362353 - Poprawka spekulacyjna dla tabletów Shield obsługującego interfejs API 24, który czasem zwracał błąd
IllegalArgumentException
. b/119484416
Najnowsze zmiany w interfejsie API
- Obsługa usługi JobDispatcher w Firebase została wycofana z powodu zbliżającego się jej wycofania. Oznacza to, że podczas przechodzenia do wersji beta artefakt
work-firebase
nie będzie już aktualizowany. W przyszłości rozważymy dodanie takiego rozwiązania. - Łączono:
Payload
w:Result
.Result
jest teraz „zaklejoną klasą” z 3 konkretnymi implementacjami, które można uzyskać za pomocąResult.success()
(lubResult.success(Data)
),Result.failure()
(alboResult.failure(Data)
) iResult.retry()
. Wyniki z Twojego źródła danych (ListenableFuture
) dają teraz wynikResult
zamiastPayload
. MetodyWorker
nie mają metod pobierania ani ustawiania dla danych wyjściowychData
. - Dodano metody rozszerzenia Kotlin:
Operation.await()
iListenableFuture.await()
. - Nazwa elementu
Operation.getException()
została zmieniona naOperation.getThrowable()
. - Klasa
ContentUriTriggers
i metody odwołujące się do niej nie są już dostępne publicznie. - Aby uprościć interfejs API, usunięto pozostałe metody varargs w funkcjach
WorkManager
,WorkContinuation
iOneTimeWorkRequest
. Aby rozwiązać problemy z kompilacją, możesz opakować istniejące zmienne Vararg za pomocą atrybutuArrays.asList(...)
. Nadal uwzględniamy wersje z jednym argumentem w każdej metodzie. - Usunięto
WorkContinuation.combine(OneTimeWorkRequest, *)
warianty. Prezentował interfejs API niejasny, a dotychczasowe metodycombine
są bardziej zrozumiałe.
Wersja 1.0.0-alfa11
8 listopada 2018 r.
Ta wersja zawiera wiele zmian, które staną się stabilnym interfejsem API w wersji beta
.
W tej wersji wprowadzono niezbędne zmiany w interfejsie API. Zapoznaj się z sekcją Breaking API changes poniżej.
Zmiany w interfejsie API
work-runtime-ktx
przedstawia nowe urządzenieCoroutineWorker
.- Nazwa konta
WorkStatus
została zmieniona naWorkInfo
. Wszystkie odpowiadające im warianty metodygetStatus
zostały zmienione na odpowiadające im wariantygetWorkInfo
. Jest to niezbędna zmiana. ListenableWorker.onStopped()
nie akceptuje już argumentu logicznego, który wskazuje, czy elementWorkRequest
został anulowany.WorkManager
nie wprowadza już tego rozróżnienia. Jest to niezbędna zmiana.- Nazwa pakietu
androidx.work.test
została zmieniona na pakietandroidx.work.testing
. Jest to niezbędna zmiana. - Metody ustawiające w
Constraints
nie są już częścią publicznego interfejsu API. Jest to niezbędna zmiana. - Metody
WorkerParameters.getTriggeredContentUris()
iWorkerParameters.getTriggeredContentAuthorities()
zwróciły wcześniej tablice. Teraz te metody zwracają kolekcje. Jest to niezbędna zmiana. - Nazwa aplikacji
ListenableWorker.onStartWork()
została zmieniona naListenableWorker.startWork()
. Jest to niezbędna zmiana. - Konstruktor
WorkStatus
nie jest już częścią publicznego interfejsu API. Jest to niezbędna zmiana. - Nazwy
Configuration.getMaxJobSchedulerID()
iConfiguration.getMinJobSchedulerID()
zostały zmienione naConfiguration.getMinJobSchedulerId()
iConfiguration.getMaxJobSchedulerId()
. Jest to niezbędna zmiana. - Do publicznego interfejsu API dodaliśmy wiele adnotacji
@NonNull
, aby poprawić ergonomię interfejsu API. - Dodaj interfejs
WorkManager.enqueueUniqueWork()
API, aby umieszczać w kolejce unikalne elementyOneTimeWorkRequest
bez konieczności tworzeniaWorkContinuation
. - Wszystkie warianty metod
enqueue
icancel
wWorkManager
zwracają teraz nowy typOperation
. Jest to niezbędna zmiana. - Żadne warianty typu
enqueue
nie obsługują już zmiennych zmiennych typuWorkRequest
. Jest to niezbędna zmiana. Zamiast tego użyj Kolekcji. Do zmiany istniejącego kodu możesz użyćArrays.asList()
. Zrobiliśmy to, aby ograniczyć liczbę powierzchni i metod API. - Próba
initialize
WorkManager
więcej niż raz na proces spowoduje terazIllegalStateException
. Jest to niezbędna zmiana.
Poprawki błędów
- Elementy
WorkRequest.Builder
w artefakciework-runtime-ktx
używają teraz komponentówListenableWorker
. Poprawki b/117666259 - Upewnij się, że następne uruchomienie instancji
PeriodicWork
przypada w przyszłości. Poprawki b/118204399 - Usuń potencjalne wejście/wyjście dysku, jeśli używasz WorkManagera podczas uruchamiania aplikacji. Poprawki b/117796731
- Popraw warunki wyścigu w:
WorkConstraintsTracker
. Naprawia błąd android-workmanager/issues/56.
Najnowsze zmiany w interfejsie API
- Nazwa konta
WorkStatus
została zmieniona naWorkInfo
. Wszystkie odpowiadające im warianty metodygetStatus
zostały zmienione na odpowiadające im wariantygetWorkInfo
. ListenableWorker.onStopped()
nie akceptuje już argumentu logicznego, który wskazuje, czy elementWorkRequest
został anulowany.WorkManager
nie wprowadza już tego rozróżnienia.- Nazwa pakietu
androidx.work.test
została zmieniona na pakietandroidx.work.testing
. - Metody ustawiające w
Constraints
nie są już częścią publicznego interfejsu API. - Metody
WorkerParameters.getTriggeredContentUris()
iWorkerParameters.getTriggeredContentAuthorities()
zwróciły wcześniej tablice. Teraz te metody zwracają kolekcje. - Nazwa aplikacji
ListenableWorker.onStartWork()
została zmieniona naListenableWorker.startWork()
. - Konstruktor
WorkStatus
nie jest już częścią publicznego interfejsu API. - Nazwy
Configuration.getMaxJobSchedulerID()
iConfiguration.getMinJobSchedulerID()
zostały zmienione naConfiguration.getMinJobSchedulerId()
iConfiguration.getMaxJobSchedulerId()
. - Wszystkie warianty metod
enqueue
icancel
wWorkManager
zwracają teraz nowy typOperation
. - Żadne warianty typu
enqueue
nie obsługują już zmiennych zmiennych typuWorkRequest
. - Próba
initialize
WorkManager
więcej niż raz na proces spowoduje terazIllegalStateException
.
Wersja 1.0.0-alfa10
11 października 2018 r.
Ta wersja obsługuje asynchroniczną pracę kontrolowaną przez dewelopera. W tej wersji wprowadzono niezbędne zmiany w interfejsie API. Zapoznaj się z sekcją Breaking API changes poniżej.
Przewidujemy, że WorkManager wchodzi w ostatnie fazy okresu alfa. Spodziewamy się, że interfejs API będzie stabilny w wersji beta, dlatego poświęć trochę czasu na przesłanie opinii w naszym narzędziu do śledzenia problemów.
Zmiany w interfejsie API
- Usunięto wszystkie metody i klasy, które wcześniej
deprecated
, a zwłaszcza domyślny konstruktorWorker
. Jest to niezgodna zmiana w interfejsie API. - Nazwa
NonBlockingWorker
została zmieniona naListenableWorker
, która jest teraz odkrytą klasą publiczną i jest gotowa do użycia.- Metoda
ListenableWorker
zapewnia dostęp do 1 metody abstrakcyjnejListenableFuture<Payload> onStartWork()
, która jest wywoływana w wątku głównym. To Ty musisz rozpocząć i przetwarzać asynchroniczną pracę. Gdy skończysz, musisz odpowiednio zaktualizowaćListenableFuture
. Referencyjne implementacjeListenableFuture
są dostępne w pakiecieFutures
w językualpha02
(patrz sekcjaWorkManager
poniżej). - Komponent
Worker
rozszerza zakresListenableWorker
i nadal działa jak wcześniej, z użyciem metody abstrakcyjnejResult doWork()
. - Niektóre metody i członków zostały losowo zmienione z
Worker
naListenableWorker
. - Wkrótce udostępnimy referencyjne implementacje
ListenableWorker
, które używają współprogramów Kotlin (po opublikowaniu stabilnych wersji) i RxJava2.
- Metoda
- Interfejs
WorkerFactory
i konkretna implementacjaDefaultWorkerFactory
zostały scalone w klasę abstrakcyjną o nazwieWorkerFactory
. Implementacja zapewnia, że domyślne zachowanie oparte na odczuciach jest wywoływane w ramach ostatniej próby w przypadku wszystkich instancjiWorkerFactory
utworzonych przez użytkowników. Jest to niezbędna zmiana. - Usunięto metody
WorkManager.synchronous()
iWorkContinuation.synchronous()
oraz wszystkie powiązane metody. DodanoListenableFuture<Void>
jako zwracany typ wielu metod w interfejsie API. Jest to niezgodna zmiana w interfejsie API.- Możesz teraz synchronicznie pobierać i obserwować zdjęcia, korzystając z komponentów
ListenableFuture
. Na przykładWorkManager.enqueue()
zwracał kiedyś wynikvoid
, a teraz zwraca wartośćListenableFuture<Void>
. Możesz wywołaćListenableFuture.addListener(Runnable, Executor)
lubListenableFuture.get()
, aby uruchomić kod po zakończeniu operacji. - Pamiętaj, że te
ListenableFuture
nie informują o tym, czy operacja się udała czy nie. tylko o jego zakończeniu. Aby uzyskać te informacje, nadal musisz powiązać metody WorkManager w łańcuch. - Ignorujemy wywołania
cancel()
dotyczące tych obiektów, ponieważ są one niejasne i trudne w uzasadnieniu (czy anulujesz operację czy wynikową pracę?). Zgodnie z umowąFuture
. - Aby zachować spójność z synchronicznymi metodami
getStatus*
, udostępniliśmy wariantyListenableFuture
i zmieniliśmy nazwy istniejących wariantów, które zwracały wartościLiveData
, tak aby zawierały „LiveData” w nazwie (np.getStatusesByIdLiveData(UUID)
). Jest to niezbędna zmiana w interfejsie API.
- Możesz teraz synchronicznie pobierać i obserwować zdjęcia, korzystając z komponentów
Poprawki błędów
- Naprawiono znany problem z wersji alfa09 dotyczący zduplikowanych plików
androidx-annotations.pro
. Możesz usunąć obejście z poprzednich informacji o wersji, usuwającexclude 'META-INF/proguard/androidx-annotations.pro'
z pliku Gradle. - Dodano konfiguracje Prokoparda, by zachować nowy konstruktor
Worker
. b/116296569 - Popraw potencjalną wartość
NullPointerException
w warunkach wyścigu, dla których zadanie byłoREPLACE
. b/116253486 i b/116677275 WorkContinuation.combine()
akceptuje teraz co najmniej 1 komponentWorkContinuation
zamiast 2 lub więcej elementów. b/117266752
Najnowsze zmiany w interfejsie API
- Usunięto wszystkie metody i klasy, które wcześniej
deprecated
, a zwłaszcza domyślny konstruktorWorker
. - Interfejs
WorkerFactory
i konkretna implementacjaDefaultWorkerFactory
zostały scalone w klasę abstrakcyjną o nazwieWorkerFactory
. - Usunięto
WorkManager.synchronous()
iWorkContinuation.synchronous()
. - Metody
WorkManager.getStatus*()
zwracają teraz wartościListenableFuture
.WorkManager.getStatus*LiveData()
: powrótLiveData
.
Wersja 1.0.0-alfa09
19 września 2018 r.
Znany problem
Jeśli napotkasz ten problem: „Znaleziono więcej niż 1 plik ze ścieżką niezależną od systemu operacyjnego „META-INF/proguard/androidx-annotations.pro”, umieść poniższy kod w pliku Gradle jako tymczasowe obejście do czasu, gdy rozwiążemy ten problem w wersji alfa10:
Odlotowy
android { packagingOptions { exclude 'META-INF/proguard/androidx-annotations.pro' } }
Kotlin
android { packagingOptions { exclude("META-INF/proguard/androidx-annotations.pro") } }
Poprawki błędów
- Dodaliśmy kolejną poprawkę niezbędną do wystąpienia błędu „100 zadań”. b/115560696
- Dodaliśmy kilka poprawek błędów związanych z ograniczeniami klucza obcego spowodowanymi warunkami wyścigu. b/114705286
- Przekazano wywołania
ConstraintTrackingWorker.onStopped(boolean)
do bazowej instancjiWorker
. b/114125093 - Wymuszaj prawidłowe minimalne opóźnienie ponowienia dla Firebase JobDispatcher. b/113304626
- Ulepszona funkcja podziału na wątki gwarantuje wewnętrzny charakter biblioteki.
- Napraw potencjalny problem z wewnętrznym usuwaniem duplikatów
LiveData
.
Zmiany w interfejsie API
- Możesz teraz tworzyć własne instancje
Worker
w czasie działania, określającWorkerFactory
w komponencieWorkManager.Configuration
. Fabryka zastępcza toDefaultWorkerFactory
. Pasuje do wcześniejszych wersji WorkManagera.- Domyślne konstruktory
Worker
iNonBlockingWorker
są teraz oznaczone jako wycofane. Użyj nowego konstruktora (Worker(Context, WorkerParameters)
) i wywołajsuper(Context, WorkerParameters)
. W przyszłych wersjach WorkManagera zostanie usunięty domyślny konstruktor.
- Domyślne konstruktory
- Zaczęliśmy korzystać z nowego artefaktu
ListenableFuture
wewnętrznie (bez zależności Gujawa). W kolejnych wersjach wprowadzimy do interfejsu API ListenableFutures. Ta zmiana umożliwi późniejsze odkrycie elementuNonBlockingWorker
. - Dodano możliwość uruchamiania pracy na czas w aplikacji
TestDriver
za pomocąTestDriver.setInitialDelayMet(UUID)
iTestDriver.setPeriodDelayMet(UUID)
. b/113360060
Niezbędne zmiany
- Domyślne konstruktory
Worker
iNonBlockingWorker
zostały wycofane. Jak najszybciej przejdź na nowy konstruktor. W kolejnych wersjach zostanie usunięty domyślny konstruktor.
Wersja 1.0.0-alfa08
27 sierpnia 2018 r.
Poprawki błędów
- Wyraźnie oznaczono komponenty WorkManagera jako nieświadome i nie są one uruchamiane bezpośrednio podczas rozruchu bezpośredniego. W przyszłości udostępnimy wersję WorkManagera z bezpośrednim rozruchem. b/112665532
- Rozwiązaliśmy problem, który powodował, że ponawiana praca nie była uruchamiana. b/112604021
- Ustalona praca okresowa nie powtarzała się wielokrotnie (związane z tym problemem). b/112859683
- Uznawane zasady wycofywania, gdy proces aplikacji jest już uruchomiony.
- Poprawiliśmy komunikaty o wyjątkach w pliku
Data
, aby wskazać, że limit wynosi 10 KB. - Zmniejszono maksymalną wartość z
Configuration.setMaxSchedulerLimit(int)
do 50, aby uwzględnić czas oczekiwania na zakończenie przetwarzaniaJobScheduler
. b/112817355
Wersja 1.0.0-alfa07
16 sierpnia 2018 r.
Poprawki błędów
- Naprawiono potencjalne zapytanie SQL z ujemnymi limitami, które mogło zwracać nieograniczoną liczbę wyników.
- Zadania, których wykonanie zostało ukończone, są teraz prawidłowo anulowane wszystkie oczekujące kopie tej pracy w innych algorytmach szeregowania. Doprowadziło to do przekroczenia limitu
JobScheduler
zadań. b/111569265 - Naprawiono
ConcurrentModificationException
wConstraintTracker
. b/112272753 - Adnotacje typu zwracanego kodu
Data.getBooleanArray(String)
iData.getIntArray(String)
zostały zmienione na@Nullable
zamiast@NonNull
. b/112275229
Zmiany w interfejsie API
Worker
przedłuża teraz nowe zajęcia:NonBlockingWorker
. Nie ma to wpływu na bieżące wykorzystanie. W przyszłościNonBlockingWorker
stanie się w pełni obsługiwanym elementem w przypadku niestandardowych rozwiązań do obsługi wątków.- Adnotacje typu zwracanego kodu
Data.getBooleanArray(String)
iData.getIntArray(String)
zostały zmienione na@Nullable
zamiast@NonNull
. b/112275229 - Rozszerzenia Kotlin: wycofano interfejs
Map.toWorkData()
i dodanoworkDataOf(vararg Pair<String, Any?>)
najwyższego poziomu, aby zapewnić większą spójność z istniejącymi interfejsami API.
Wersja 1.0.0-alfa06
1 sierpnia 2018 r.
Poprawki błędów
- Zapobiegaj blokadzie bazy danych podczas planowania pracy. b/111801342
- Popraw błąd, przez który
PeriodicWork
nie uruchamia się zgodnie z harmonogramem w trybie uśpienia. b/111469837 - Napraw warunki wyścigu, gdy śledzisz ograniczenia, które powodują awarię
WorkManager
. googlecodelabs/android-workmanager/issues/56 - Jeśli używasz
WorkRequest.Builder#build()
, utwórz niepowtarzalne elementyWorkRequest
. b/111408337 - Włącz korzystanie z właściwości
RescheduleReceiver
tylko wtedy, gdy potrzebne są komponentyWorkRequest
. b/111765853
Wersja 1.0.0-alfa05
24 lipca 2018 r.
Zmiany w interfejsie API
- Adnotacje
WorkManager.getInstance()
mają teraz postać@NonNull
zamiast@Nullable
. Jeśli natomiast singleton nie zostanie poprawnie zainicjowany w przypadku inicjowania ręcznego, metoda spowoduje zgłoszenie błęduIllegalStateException
. Jest to przełomowa zmiana w interfejsie API. - Dodaliśmy nowy interfejs API
Configuration.Builder.setMinimumLoggingLevel(int)
, który może kontrolować szczegółowość w usłudze WorkManager. Domyślnie WorkManager rejestruje daneLog.INFO
i nowsze. - Zmieniono podpis interfejsu
Data.getString()
, więc nie przyjmuje on już wartości domyślnej (domyślnienull
). Jest to niezgodna zmiana w interfejsie API. - Niektóre metody potrzebne tylko do użytku wewnętrznego oznaczono jako
@hide
. Obejmuje to konstruktorConstraints
,Data.toByteArray()
iData.fromByteArray(byte[])
. Jest to niezgodna zmiana w interfejsie API.
Poprawki błędów
- WorkManager nie wykonuje już zadań w znanych przypadkach automatycznej kopii zapasowej. Mogło to spowodować awarię. b/110564377
- Poprawiono podwójne harmonogramy
PeriodicWorkRequest
s przy korzystaniu z metodyJobScheduler
. b/110798652 - Naprawiono problem z prawidłowym działaniem funkcji
PeriodicWorkRequest
po uśpieniu urządzenia. b/111469837 - Rozwiązaliśmy problem z początkowymi opóźnieniami podczas korzystania z Firebase JobDispatcher. b/111141023
- Naprawiliśmy kilka potencjalnych problemów z warunkami i czasem wyścigu.
- Prawidłowo zwolniono
BroadcastReceiver
elementy, które nie były już potrzebne. - Zoptymalizowano przekładanie wydajności na ponowne uruchomienie aplikacji po wymuszeniu zamknięcia.
- Zezwolono na wywołanie funkcji
TestScheduler.setAllConstraintsMet(UUID)
przed umieszczeniem danego elementuWorkRequest
w kolejce lub po nim. b/111238024
Niezbędne zmiany
- Adnotacje
WorkManager.getInstance()
mają teraz postać@NonNull
zamiast@Nullable
. - Zmieniono podpis elementu
Data.getString()
, więc nie przyjmuje już wartości domyślnej (domyślnienull
). - Niektóre metody potrzebne tylko do użytku wewnętrznego oznaczono jako
@hide
. Obejmuje to konstruktorConstraints
,Data.toByteArray()
iData.fromByteArray(byte[])
.
Wersja 1.0.0-alfa04
26 czerwca 2018 r.
Poprawki błędów
- Harmonogramy
PeriodicWorkRequest
są teraz prawidłowo przekładane w przypadku korzystania z implementacji opartej naAlarmManager
. - Naprawiono potencjalny błąd ANR, który występował podczas przekładania wszystkich instancji roboczych po wymuszeniu zatrzymania lub ponownym uruchomieniu. b/110507716
- Dodano adnotacje wartości null do różnych interfejsów API WorkManager. b/110344065
- Loguj niewykryte wyjątki, które występują podczas wykonywania instancji roboczej. b/109900862
- Dozwolone niszczycielskie migracje bazy danych w przypadku przywrócenia starszej wersji WorkManagera. b/74633270
- Naprawiono awarię migracji podczas tworzenia zduplikowanych tagów niejawnych. Jest to bardzo rzadki problem, który występuje tylko wtedy, gdy samodzielnie używasz tego samego formatu tagu niejawnego.
Wersja 1.0.0-alfa03
19 czerwca 2018 r.
Poprawki błędów
Naprawiono warunek wyścigu w implementacji opartej na
AlarmManager
. b/80346526.Naprawiono zduplikowane zadania podczas korzystania z
JobScheduler
po ponownym uruchomieniu urządzenia.Zadania z aktywatorami identyfikatora URI treści są teraz zachowywane również po ponownym uruchomieniu. b/80234744
Aktualizacje dokumentacji: b/109827628, b/109758949, b/80230748
Naprawiono awarię podczas ponownego dodawania do kolejki elementu
WorkRequest
. b/109572353.Naprawiliśmy ostrzeżenia kompilatora Kotlin podczas korzystania z zależności
work-runtime-ktx
.WorkManager używa teraz
Room
w wersji1.1.1-rc1
.
Zmiany w interfejsie API
- Dodano synchroniczną wersję systemu
WorkContinuation.getStatuses()
getStatusesSync()
. Worker
potrafi odróżnić anulowanie inicjowane przez użytkownika od tymczasowego zatrzymania na żądanie systemu operacyjnego.Worker.isStopped()
zwraca wartośćtrue
, jeśli przesłano żądanie postoju.Worker.isCancelled()
zwraca wartośćtrue
, gdy zadanie zostało wyraźnie anulowane. b/79632247- Dodano obsługę JobParameters#getNetwork() w interfejsie API 28. Ta reklama jest widoczna w aplikacji
Worker.getNetwork()
. - Dodano dyrektywę
Configuration.Builder.setMaxSchedulerLimit(int maxSchedulerLimit)
, aby umożliwić Ci wymuszenie wysyłania liczby zadań do wysyłania doJobScheduler
lubAlarmManager
. Dzięki temuWorkManager
nie zajmie wszystkich dostępnychJobScheduler
miejsc. - Dodano funkcję
Configuration.setJobSchedulerJobIdRange(int minJobSchedulerId, int maxJobSchedulerId)
, która pomaga zdefiniować zakres identyfikatorów zadańJobScheduler
, którychWorkManager
może używać. b/79996760 Worker.getRunAttemptCount()
zwraca bieżącą liczbę uruchomień dla danego parametruWorker
. B/79716516WorkManager.enqueueUniquePeriodicWork(String uniqueWorkName, ExistingPeriodicWorkPolicy existingPeriodicWorkPolicy, PeriodicWorkRequest periodicWork)
umożliwia umieszczenie w kolejce unikalnych kluczyPeriodicWorkRequest
. b/79600647WorkManager.cancelAllWork()
anuluje wszystkieWorker
. Biblioteki zależne odWorkManager
mogą wysyłać zapytania, gdy ta metoda została wywołana jako ostatnia, używającWorkManager.getLastCancelAllTimeMillis()
w celu dodatkowego czyszczenia stanu wewnętrznego.- Dodano polecenie
WorkManager.pruneWork()
, aby usunąć ukończone zadania z wewnętrznej bazy danych. b/79950952, b/109710758
Zmiany w działaniu
- Dodaliśmy niejawny tag do wszystkich elementów
WorkRequest
, który jest w pełni kwalifikowaną nazwą klasy na potrzeby klasyWorker
. Ta opcja umożliwia usuwanie komponentówWorkRequest
bez elementówtag
lub gdyid
jest niedostępny. b/109572351
Niezbędne zmiany
- Nazwa elementu
Worker.WorkerResult
została zmieniona naWorker.Result
. Worker.onStopped
ma teraz dodatkowy parametrisCancelled
ustawiony natrue
, gdy zdarzenieWorker
zostało bezpośrednio anulowane.
Wersja 1.0.0-alfa02
24 maja 2018 r.
Poprawki błędów
- Poprawiono błąd
NullPointerException
w dniuState.isFinished()
. B/79550068 - Rozwiązaliśmy problem, który powodował, że harmonogram spotkań
Worker
został przełożony naApplication.onCreate()
. B/79660657 - Rozwiązaliśmy problem, który powodował, że można było zaplanować więcej zadań niż jest to dozwolone w systemie operacyjnym. b/79497378
- Przenieśliśmy czyszczenie blokad uśpienia powiązanych z urządzeniami
Worker
do wątku w tle. - Implementacja
AlarmManager
jest teraz prawidłowo czyszczona po zakończeniu wszystkich oczekujących zadań. - Usunięto problem z zapytaniami SQL czyszczenia, które wpływały na języki inne niż angielski. b/80065360
- Dodano obsługę komponentów
float
w usłudzeData
. b/79443878 Data.Builder.putAll()
zwraca teraz wystąpienieBuilder
. b/79699162- Więcej plików javadoc i poprawek w dokumentacji. b/79691663
Zmiany w interfejsie API
Worker
może zareagować na zatrzymanie.Worker.isStopped()
może zostać użyty do sprawdzenia, czyWorker
został zatrzymany.Worker.onStopped()
może służyć do wykonywania prostych operacji czyszczenia.- Interfejs
Worker.getTags()
API zwracaSet
tagów powiązanych zWorker
. - Dodano przeciążenia (
javax.time.Duration
) w przypadku interfejsów API, które wymagają kombinacji czasu trwania iTimeUnit
. Strzeżony przez@RequiresApi(26)
. - Rozszerzenia (
WorkManager
) zostały przeniesione z pakietuandroidx.work.ktx
do pakietuandroidx.work
. Stare rozszerzenia zostały wycofane i zostaną usunięte w przyszłej wersji. - Interfejs
Configuration.withExecutor()
został wycofany. Użyj w zamian zasadyConfiguration.setExecutor()
.
Wersja 1.0.0-alfa01
8 maja 2018 r.
Usługa WorkManager upraszcza planowanie i wykonywanie gwarantowanych zadań w tle z uwzględnieniem ograniczeń. Pierwsza wersja to 1.0.0-alpha01
.