WorkManager
Ostatnia aktualizacja | Wersja stabilna | Wersja kandydująca | Wersja Beta | Wersja alfa |
---|---|---|---|---|
30 października 2024 r. | 2.10.0 | - | - | - |
Deklarowanie zależności
Aby dodać zależność od WorkManager, musisz dodać do projektu repozytorium Google Maven:
Dodaj zależności dla artefaktów, których potrzebujesz, w pliku build.gradle
aplikacji lub modułu:
Odlotowe
dependencies { def work_version = "2.9.1" // (Java only) implementation "androidx.work:work-runtime:$work_version" // Kotlin + coroutines implementation "androidx.work:work-runtime-ktx:$work_version" // optional - RxJava2 support implementation "androidx.work:work-rxjava2:$work_version" // optional - GCMNetworkManager support implementation "androidx.work:work-gcm:$work_version" // optional - Test helpers androidTestImplementation "androidx.work:work-testing:$work_version" // optional - Multiprocess support implementation "androidx.work:work-multiprocess:$work_version" }
Kotlin
dependencies { val work_version = "2.9.1" // (Java only) implementation("androidx.work:work-runtime:$work_version") // Kotlin + coroutines implementation("androidx.work:work-runtime-ktx:$work_version") // optional - RxJava2 support implementation("androidx.work:work-rxjava2:$work_version") // optional - GCMNetworkManager support implementation("androidx.work:work-gcm:$work_version") // optional - Test helpers androidTestImplementation("androidx.work:work-testing:$work_version") // optional - Multiprocess support implementation("androidx.work:work-multiprocess:$work_version") }
Informacje o korzystaniu z rozszerzeń Kotlina znajdziesz w dokumentacji ktx.
Więcej informacji o zależnościach znajdziesz w artykule Dodawanie zależności kompilacji.
Opinia
Twoja opinia pomoże nam ulepszyć Jetpacka. Daj nam znać, jeśli zauważysz nowe problemy lub masz pomysły na ulepszenie tej biblioteki. Zanim utworzysz nowy problem, zapoznaj się z dotychczasowymi problemami w tej bibliotece. Możesz zagłosować na istniejący problem, klikając przycisk z gwiazdką.
Więcej informacji znajdziesz w dokumentacji narzędzia Issue Tracker.
Wersja 2.10
Wersja 2.10.0
30 października 2024 r.
androidx.work:work-*:2.10.0
został zwolniony. Wersja 2.10.0 zawiera te komity.
Znaczące zmiany od wersji 2.9.1
- Dodano tagi śledzenia do zadań z
WorkManager
, dzięki czemu polecenie „adb shell dumpsys jobscheduler” jest znacznie łatwiejsze do zrozumienia, ponieważ zawiera nazwę wykonywanego zadania. Dodano też sekcje śledzenia wokół kluczowych obszarówWorkManager
. - Dodano element sterujący
Configuration.workerCoroutineContext
do kontrolowania modułu rozsyłającego, w którym wykonywane jest działanieCoroutineWorker
. - Deweloperzy mogą określić
NetworkRequest
jako ograniczenie dla instancji roboczej za pomocą metodyConstraints.setRequiredNetworkRequest
. Dzięki temu możesz dokładniej określić, w której sieci ma działać ta instancja robocza. WorkManager
Wersja 2.10.0 jest teraz skompilowana z pakietem SDK 35 i zawiera różne zmiany zapewniające zgodność z tym pakietem.
Wersja 2.10.0-rc01
24 października 2024 r.
androidx.work:work-*:2.10.0-rc01
został zwolniony. Wersja 2.10.0-rc01 zawiera te komisy.
Wersja 2.10.0-beta01
2 października 2024 r.
androidx.work:work-*:2.10.0-beta01
został zwolniony. Wersja 2.10.0-beta01 zawiera te komity.
Wersja 2.10.0-alpha04
18 września 2024 r.
androidx.work:work-*:2.10.0-alpha04
został zwolniony. Wersja 2.10.0-alpha04 zawiera te komity.
Zmiany w interfejsie API
- Dodaj przyczynę zatrzymania
STOP_REASON_FOREGROUND_SERVICE_TIMEOUT
, gdy instancja robocza na pierwszym planie zostanie zatrzymana z powodu przekroczenia limitu czasu wykonywania na podstawie typu usługi na pierwszym planie. (Ibd0af)
Wersja 2.10.0-alpha03
4 września 2024 r.
androidx.work:work-*:2.10.0-alpha03
został zwolniony. Wersja 2.10.0-alpha03 zawiera te komity.
Nowe funkcje
- Dodano tagi śledzenia do zadań z
WorkManager
, dzięki czemu polecenie „adb shell dumpsys jobscheduler” jest znacznie łatwiejsze do zrozumienia, ponieważ zawiera nazwę wykonywanego zadania. Dodano też sekcje śledzenia wokół kluczowych obszarówWorkManager
.
Zmiany w interfejsie API
- WorkManager 2.10.0 jest teraz kompilowany z pakietem SDK 35.
- Napraw problem z usługami na pierwszym planie typu „short service” i „data sync”, które powodują przekroczenie limitu czasu i wywołują ANR, gdy
WorkManager
nie wywołujestopSelf()
. Ta poprawka dotyczy tylko urządzeń z interfejsem API 34 i 35, na których wprowadzono typy usług na pierwszym planie. (ca06b2, b/364508145) - Nowe interfejsy API
WorkerParameters
, które umożliwiają przełączanie procesu zdalnego, do któregoWorker
się łączy podczas korzystania zWorkerFactory
. (Ibdc8a, Ie8a90, I7373f)
Poprawki błędów
- Rozwiązanie problemu awarii spowodowanego przez próbę ponownego uruchomienia przez
WorkManager
trwającej przez długi czas instancji roboczej (czyli roboczej na pierwszym planie), gdy typ pracy na pierwszym planie miał uprawnienia wymagane przez Androida 14, które zostały cofnięte. (b/333957914) - Usunięto ręczne określanie dostępu do nowych interfejsów API platformy, ponieważ odbywa się to automatycznie za pomocą modelowania interfejsu API podczas korzystania z R8 z AGP 7.3 lub nowszym (np. R8 w wersji 3.3) oraz we wszystkich wersjach kompilacji przy użyciu AGP 8.1 lub nowszego (np. D8 w wersji 8.1). Klienci, którzy nie korzystają z AGP, powinni zaktualizować D8 do wersji 8.1 lub nowszej. Więcej szczegółów znajdziesz w tym artykule. (Ia60e0, b/345472586)
Wersja 2.10.0-alpha02
17 kwietnia 2024 r.
androidx.work:work-*:2.10.0-alpha02
został zwolniony. Wersja 2.10.0-alpha02 zawiera te komity.
Zmiany w interfejsie API
- Dodaliśmy możliwość emitowania zakresów przechwytywania za pomocą konfigurowalnego elementu
@RestrictTo
Tracer
w elementachWorkManager
. (I17d7f, b/260214125) - Dodano element sterujący
Configuration.workerCoroutineContext
do kontrolowania modułu rozsyłającego, w którym wykonywane jest działanieCoroutineWorker
. Pomaga to całkowicie uniknąć używaniaDispatchers.Default
w elementachWorkManager
. (Icd1b7) - Dodaj niestandardowe moduły obsługi wyjątków dla Workers (Ib1b74, b/261190695)
- Funkcje
OneTimeWorkRequest.Builder
iPeriodicWorkRequest.Builder
można teraz tworzyć za pomocąKClass
zamiastClass
:val request = OneTimeWorkRequest.Builder(Worker::class).setConstraints(...).build()
(Ib55f6) - Klasa
WorkManager
została przeniesiona do Kotlina. Teraz metody zwracająceLiveData
,ListenableFuture
lubFlow
podają prawidłowe informacje o możliwości wystąpienia wartości null. Może to wymagać wprowadzenia zmian w kodzie źródłowym klienta, jeśli założenia dotyczące możliwości występowania wartości null w tym kodzie były nieprawidłowe. (If6757)
Wersja 2.10.0-alpha01
24 stycznia 2024 r.
androidx.work:work-*:2.10.0-alpha01
został zwolniony. Wersja 2.10.0-alpha01 zawiera te commity.
Nowe funkcje
- Deweloperzy mogą określić
NetworkRequest
jako ograniczenie dla pracownika za pomocą metodyConstraints.setRequiredNetworkRequest
. Dzięki temu możesz dokładniej określić, w której sieci ma działać ta instancja robocza.
Zmiany w interfejsie API
- Dodanie możliwości określenia
NetworkRequest
jako ograniczenia. (Id98a1, b/280634452)
Wersja 2.9
Wersja 2.9.1
7 sierpnia 2024 r.
androidx.work:work-*:2.9.1
został zwolniony. Wersja 2.9.1 zawiera te komity.
Poprawki błędów
- Rozwiązanie problemu awarii spowodowanego przez próbę ponownego uruchomienia przez
WorkManager
długo działającego workera (czyli workera na pierwszym planie), gdy typ pracy na pierwszym planie miał cofniętą uprawnienie wymagane w Androidzie 14. (b/333957914)
Wersja 2.9.0
29 listopada 2023 r.
androidx.work:work-*:2.9.0
został zwolniony. Wersja 2.9.0 zawiera te commity.
Ważne zmiany od wersji 2.8.0
- Dostrzegalność za pomocą
Flow
. ZamiastLiveData
postępy pracownika można teraz obserwować za pomocą metodWorkManager.getWorkInfosFlow
i podobnych metod. - Teraz
WorkManager
zawiera wskazówkę, dlaczego instancja robocza została wcześniej zatrzymana. Możesz go użyć, wysyłając zapytanie z poziomu instancji roboczej za pomocą metodygetStopReason()
lub z poziomuWorkInfo
za pomocą metodygetStopReason()
. - Dokładne planowanie okresowych pracowników za pomocą
setNextScheduleTimeOverride
. Umożliwia to dynamiczne obliczanie kolejnego harmonogramu pracy okresowej, który może służyć do implementowania zaawansowanych funkcji, takich jak adaptacyjne czasy odświeżania, niestandardowe zachowanie prób ponownego wykonania czy uruchamianie zadania dotyczącego kanału z wiadomościami przed każdym porannym wstaniem użytkownika bez przesunięcia. Aby uniknąć anulowania obecnie działającego zadania podczas planowania kolejnego, należy używać funkcjiExistingPeriodicWorkPolicy.UPDATE
. - Testowanie WorkManagera z wykorzystaniem wątków dopasowanych do produkcji.
ExecutorsMode.PRESERVE_EXECUTORS
można użyć w funkcjiinitializeTestWorkManager
, aby zachować wykonawców ustawionych w funkcjiConfiguration
i użyć rzeczywistego wątku głównego. - Interfejsy API dotyczące coroutine, takie jak
CoroutineWorker
, zostały przeniesione z dodatkowego artefaktu work-runtime-ktx do głównego artefaktu work-runtime. work-runtime-ktx jest teraz pusty.
Zmiany w interfejsie API
- Do grupy
WorkInfo
został dodany użytkownikstopReason
. Dostęp do zmiennejstopReason
jest możliwy po uruchomieniu instancji roboczej. Może to być przydatne w raportowaniustopReason
, ponieważ po zatrzymaniu zadania można bardzo szybko zatrzymać całą aplikację. (I21386) - Umożliw ustawienie wartości
Clock
w konfiguracji i używanie jej do określania kolejności wykonywania testów Worker. (Ic586e) - Do metody
getStopReason()
dodano metodęListenableWorker
, która wskazuje, dlaczego instancja robocza została zatrzymana. (I07060) - Dodano
WorkManagerTestInitHelper#closeWorkDatabase()
, aby uniknąć ostrzeżenia Closeguard o wycieku zasobów. (Ia8d49) - Konstruktor klasy
WorkInfo
jest teraz publiczny, co może być przydatne podczas testowania. (Ia00b6, b/209145335) work-runtime-ktx
jest teraz pusty, aCoroutineWorker
i inne narzędzia do Kotlina są teraz dostępne w głównym artefakcie środowiska uruchomieniowego. (I71a9a)- Dodano metodę
setNextScheduleTimeOverride
, która umożliwia dokładne ustawianie okresowych harmonogramów pracy (I3b4da). - Dodano
getNextScheduleTimeMillis
, aby uzyskać informacje o planowanym czasie działania, doWorkInfo
. (I797e4) - Informacje o początkowym opóźnieniu i częstotliwości są dodawane do
WorkInfo
. (I52f2f) - Dodano metodę observe workers via Flows za pomocą metod
getWorkInfosByTagFlow
,getWorkInfoByIdFlow
,getWorkInfosForUniqueWorkFlow
,getWorkInfosFlow
(If122a). - Do konstruktorów i właściwości
Constraints
dodano brakujące adnotacje@RequiresApi(...)
. Zostały one dopasowane do odpowiednich adnotacji w metodach settera w biblioteceConstraints.Builder
, które istniały już w pierwszych wersjach bibliotekiWorkManager
. (I6d7d2) WorkManager
ma teraz osobny limit dla pracowników odpowiedzialnych za URI treści, aby zapewnić im gwarantowane sloty wJobScheduler
i zapobiec braku aktualizacji treści w przypadku dużego obciążenia. Limit można skonfigurować za pomocąConfiguration.Builder.setContentUriTriggerWorkersLimit
. (Ic128f)- Do
WorkInfo
dodano ograniczenia. (I162c0)
Wersja 2.9.0-rc01
18 października 2023 r.
androidx.work:work-*:2.9.0-rc01
został zwolniony. Wersja 2.9.0-rc01 zawiera te zatwierdzenia.
- Brak zmian od ostatniej wersji beta
Wersja 2.9.0-beta01
6 września 2023 r.
androidx.work:work-*:2.9.0-beta01
został zwolniony. Wersja 2.9.0-beta01 zawiera te commity.
Zmiany w interfejsie API
- Dodano stałe dla przyczyn zatrzymania zwracanych przez
WorkInfo.stopReason
iListenableWorker.stopReason
(I0cc00).
Wersja 2.9.0-alpha02
26 lipca 2023 r.
androidx.work:work-*:2.9.0-alpha02
został zwolniony. Wersja 2.9.0-alpha02 zawiera te commity.
Nowe funkcje
- Teraz
WorkManager
zawiera wskazówkę, dlaczego usługa została wcześniej zatrzymana. Możesz go użyć, aby zapytać o dane dotyczące pracownika za pomocą metodygetStopReason()
lubWorkInfo
za pomocą metodygetStopReason()
.
Zmiany w interfejsie API
- Do grupy
WorkInfo
został dodany użytkownikstopReason
. Udostępnia onastopReason
po uruchomieniu instancji roboczej. Może to być przydatne w raportowaniustopReason
, ponieważ po zatrzymaniu zadania można bardzo szybko zatrzymać całą aplikację. (I21386) - Zezwalanie na ustawianie zegara za pomocą konfiguracji i używanie go do określania kolejności wykonywania testów Worker. (Ic586e)
- Do metody
getStopReason()
dodano metodęListenableWorker
, która wskazuje, dlaczego instancja robocza została zatrzymana. (I07060) - Dodano
WorkManagerTestInitHelper#closeWorkDatabase()
, aby uniknąć ostrzeżenia Closeguard o wycieku zasobów. (Ia8d49)
Poprawki błędów
- Dodano możliwość pominięcia
overrideNextScheduleTime
za pomocąTestDriver
oraz rozwiązano problemy z testowalnością. (Ic2905)
Wersja 2.9.0-alpha01
7 czerwca 2023 r.
androidx.work:work-*:2.9.0-alpha01
został zwolniony. Wersja 2.9.0-alpha01 zawiera te commity.
Nowe funkcje
- Dostrzegalność za pomocą
Flow
-s. ZamiastLiveData
postępy pracownika można teraz obserwować za pomocą metodWorkManager.getWorkInfosFlow
i podobnych metod. - Dokładne planowanie okresowych pracowników za pomocą
setNextScheduleTimeOverride
. Umożliwia to dynamiczne obliczanie kolejnego harmonogramu pracy okresowej, który może służyć do implementowania zaawansowanych funkcji, takich jak adaptacyjne czasy odświeżania, niestandardowe zachowanie prób ponownego wykonania czy uruchamianie zadania dotyczącego kanału z wiadomościami przed każdym porannym wstaniem użytkownika bez przesunięcia. Aby uniknąć anulowania obecnie działającego zadania podczas planowania następnego, należy używać funkcjiExistingPeriodicWorkPolicy.UPDATE
. WorkManager
testuje wątki dopasowane do produkcji.ExecutorsMode.PRESERVE_EXECUTORS
można użyć, aby zachować wykonawców ustawionych wConfiguration
i używać rzeczywistego wątku głównego.- Interfejsy API dotyczące coroutines, takie jak
CoroutineWorker
, zostały przeniesione z dodatkowego artefaktuwork-runtime-ktx
do głównego artefaktuwork-runtime
. Polework-runtime-ktx
jest teraz puste.
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, aCoroutineWorker
i inne narzędzia do obsługi Kotlina 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
getEarliestRunTimeMillis
została zmieniona nagetNextScheduleTimeMillis
. (I2bd7a) - Informacje o czasie następnego zaplanowanego uruchomienia są dodawane do
WorkInfo
. (I797e4) - Informacje o początkowym opóźnieniu i częstotliwości są dodawane do
WorkInfo
. (I52f2f) - Dodano metodę observe workers via Flows za pomocą metod
getWorkInfosByTagFlow
,getWorkInfoByIdFlow
,getWorkInfosForUniqueWorkFlow
,getWorkInfosFlow
(If122a). - Do konstruktorów i właściwości ograniczeń dodano brakujące adnotacje
@RequiresApi(...)
. Zostały one dopasowane do odpowiednich adnotacji w metodach settera w biblioteceConstraints.Builder
, które istniały już w pierwszych wersjach bibliotekiWorkManager
. (I6d7d2) WorkManager
ma teraz osobny limit dla pracowników zajmujących się URI treści, aby zapewnić im gwarantowane miejsca wJobScheduler
i zapobiec braku aktualizacji treści w przypadku dużego obciążenia. Limit można skonfigurować za pomocąConfiguration.Builder.setContentUriTriggerWorkersLimit
. (Ic128f)- Do
WorkInfo
dodano ograniczenia. (I162c0)
Wersja 2.8
Wersja 2.8.1
22 marca 2023 r.
androidx.work:work-*:2.8.1
został zwolniony. Wersja 2.8.1 zawiera te commity.
Poprawki błędów
- Naprawiono błąd w
RescheduleReceiver
, który powodował, że ANR nie obsługiwał prawidłowo 2 jednoczesnych transmisji. (b/236906724)
Wersja 2.8.0
8 lutego 2023 r.
androidx.work:work-*:2.8.0
został zwolniony. Wersja 2.8.0 zawiera te commity.
Ważne zmiany od wersji 2.7.0
Nowe funkcje
- Dodano możliwość aktualizowania
WorkRequests
w nieinwazyjny sposób, zachowując pierwotny czas kolejkowania, łańcuchowanie itp. Więcej informacji znajdziesz w szczegółowym poście na blogu na temat tej funkcji oraz w dokumentacji Javadoc dlaWorkManager.updateWork
iExistingPeriodicWorkPolicy.UPDATE
.
Zmiany w interfejsie API
- Dodano
WorkManager.updateWork
, aby zaktualizować pracę, zachowując jej pierwotny czas kolejkowania i łańcuchowanie.(I9a248, b/219446409) - Dodano użytkownika
ExistingPeriodicWorkPolicy.UPDATE
Te zasady umożliwiają aktualizację okresowego dzieła pod kątem nazwy. Jest ona podobna do obecnej funkcjiREPLACE
, ale mniej inwazyjna: nie anuluje zadania, jeśli jest ono obecnie wykonywane, i zachowuje czas kolejkowania – początkowe opóźnienie i okres są obliczane na podstawie pierwotnego czasu kolejkowania, a nie czasu aktualizacji.REPLACE
zostało wycofane, aby zmniejszyć ryzyko pomylenia funkcji o bardzo podobnych nazwachREPLACE
iUPDATE
. Jeśli nadal chcesz zachować poprzednią semantykęREPLACE
, możesz użyć nowo dodanego elementuCANCEL_AND_REENQUEUE
, który jest identyczny z elementemREPLACE
. (I985ed, b/219446409) - Dodano możliwość przechwytywania wyjątków harmonogramu, podając
Consumer<Throwable>
za pomocą funkcji setSchedulingExceptionHandler. - Dodano możliwość przekazania wartości
Consumer<Throwable>
za pomocą metody setInitializationExceptionHandler, aby określić, czy podczas inicjowania WorkManagera wystąpiły problemy. - Pomoce w wersji inline dla funkcji
OneTimeWorkRequest
iPeriodicWorkRequest
zostały przeniesione z funkcjiandroidx.work:work-runtime-ktx
do funkcjiandroidx.work:work-runtime
(I0010f, b/209145335). - Dodano pomocnicze metody
WorkQuery.fromIds
,WorkQuery.fromStates
,WorkQuery.fromUniqueWorkNames
iWorkQuery.fromTags
, aby umożliwić bezpośrednie tworzenie obiektówWorkQuery
. (b/199919736) (If48f2, b/199919736) - Dodano
getForegroundInfo
doWorker
. (Ic1ead) RxWorker
zarówno w przypadku RxJava 2, jak i RxJava 3 ma teraz metodęsetForeground
zwracającąCompletable
, którą można użyć zamiast metodysetForegroundInfoAsync
zwracającejListenableFuture
.RxWorker
zarówno w przypadku RxJava 2, jak i RxJava 3 ma metodęgetForegroundInfo
zwracającąSingle
, którą można użyć zamiast metodygetForegroundInfoAsync
zwracającejListenableFuture
. (b/203851459)- Ograniczenia można teraz tworzyć bezpośrednio zamiast używać funkcji
Constraints.Builder
, co jest wygodne dla użytkowników Kotlina. (Idc390, b/137568653) - Dodano możliwość sprawdzenia, czy
WorkManager
została zainicjalizowana. Dodaliśmy też nowy interfejs APIgetConfiguration()
dla programistów bibliotek, który umożliwia uzyskanie konfiguracji, z którą została zainicjowana bibliotekaWorkManager
. (I6eff3, b/212300336)
Poprawki błędów
- Rozwiązaliśmy problem z łatwym harmonogramem, który uniemożliwiał natychmiastowe uruchamianie podprocesów podczas obciążenia. (I9686b, b/248111307)
- Dodaliśmy uprawnienie
@RequiresPermission
do interfejsów API, które wymagają przyznania uprawnieniaPOST_NOTIFICATIONS
w pakiecie SDK 33 lub nowszym. (Ie542e, b/238790278) - Rozpowszechnianie anulowań w
CoroutineScope
wListenableFuture
przy użyciususpendCancellableCoroutine
.
Wersja 2.8.0-rc01
7 grudnia 2022 r.
androidx.work:work-*:2.8.0-rc01
został zwolniony. Wersja 2.8.0-rc01 zawiera te commity.
Nowe funkcje
- Brak nowych funkcji w tej wersji. Jest to głównie aktualizacja wersji
Wersja 2.8.0-beta02
9 listopada 2022 r.
androidx.work:work-*:2.8.0-beta02
został zwolniony. Wersja 2.8.0-beta02 zawiera te commity.
Poprawki błędów
- Naprawiono metodę
equals
w funkcjiWorkInfo
, która wcześniej nie uwzględniała informacji o nowej generacji. (4977 cm³)
Wersja 2.8.0-beta01
5 października 2022 r.
androidx.work:work-*:2.8.0-beta01
został zwolniony. Wersja 2.8.0-beta01 zawiera te commity.
Poprawki błędów
- Rozwiązaliśmy problem z łatwym harmonogramem, który uniemożliwiał natychmiastowe uruchamianie podprocesów podczas obciążenia. (I9686b, b/248111307)
Wersja 2.8.0-alpha04
7 września 2022 roku
androidx.work:work-*:2.8.0-alpha04
został zwolniony. Wersja 2.8.0-alpha04 zawiera te commity.
Zmiany w interfejsie API
- Dodano właściwości
WorkerInfo.getGeneration()
iWorkerParameters.getGeneration()
, które zwracają generację instancji roboczej. Pracownik ma wiele generacji, jeśli został zaktualizowany za pomocą funkcjiWorkManager.updateWork
lubWorkManager.enqueueUniquePeriodicWork
za pomocą funkcjiExistingPeriodicWorkPolicy.UPDATE
. Pamiętaj, że jeśli instancja robocza jest obecnie uruchomiona, ta metoda może zwrócić nowszą generację niż ta, która jest obecnie uruchomiona, jeśli podczas wykonywania instancji roboczej nastąpiła aktualizacja. (I665c5, b/219446409) (I128a9, b/219446409) - Dodaliśmy
InitializationExceptionHandler
, czyli sterownik wyjątków, który pozwala określić, czy podczas inicjowaniaWorkManager
wystąpiły problemy. (I061de)
Wersja 2.8.0-alpha03
10 sierpnia 2022 r.
androidx.work:work-*:2.8.0-alpha03
został zwolniony. Wersja 2.8.0-alpha03 zawiera te commity.
Nowe funkcje
- Dodano możliwość aktualizowania
WorkRequests
w nieinwazyjny sposób, zachowując oryginalny czas kolejkowania, łańcuchowanie itp. Więcej informacji znajdziesz w artykułachWorkManager.updateWork
iExistingPeriodicWorkPolicy.UPDATE
.
Zmiany w interfejsie API
- Dodano
WorkManager.updateWork
, aby zaktualizować pracę, zachowując jej pierwotny czas kolejkowania i łańcuchowanie.(I9a248, b/219446409) - Dodano użytkownika
ExistingPeriodicWorkPolicy.UPDATE
Te zasady umożliwiają aktualizację okresowej pracy na podstawie nazwy. Jest ona podobna do obecnej funkcjiREPLACE
, ale mniej inwazyjna: nie anuluje zadania, jeśli jest ono obecnie wykonywane, i zachowuje czas kolejkowania – początkowe opóźnienie i okres są obliczane na podstawie pierwotnego czasu kolejkowania, a nie czasu aktualizacji.REPLACE
zostało wycofane, aby zmniejszyć zamieszanie między bardzo podobnymi nazwamiREPLACE
iUPDATE
. Jeśli nadal chcesz zachować poprzednią semantykęREPLACE
, możesz użyć nowo dodanego elementuCANCEL_AND_REENQUEUE
, który jest identyczny z elementemREPLACE
. (I985ed, b/219446409) - Dodaj możliwość przechwytywania wyjątków harmonogramu przez zdefiniowanie
SchedulingExceptionHandler
. (I033eb) - Pomoce w wersji inline dla funkcji
OneTimeWorkRequest
iPeriodicWorkRequest
zostały przeniesione z funkcjiandroidx.work:work-runtime-ktx
do funkcjiandroidx.work:work-runtime
(I0010f, b/209145335).
Poprawki błędów
- Dodano
@RequiresPermission
do interfejsów API, które wymagają przyznania uprawnienia POST_NOTIFICATIONS w pakiecie SDK 33 lub nowszym. (Ie542e, b/238790278)
Wersja 2.8.0-alpha02
6 kwietnia 2022 roku
androidx.work:work-*:2.8.0-alpha02
został zwolniony. Wersja 2.8.0-alpha02 zawiera te commity.
Zmiany w interfejsie API
- Ograniczenia można teraz tworzyć bezpośrednio zamiast za pomocą Buildera, co jest wygodne dla użytkowników Kotlina. (Idc390, b/137568653)
- Dodano możliwość sprawdzenia, czy
WorkManager
została zainicjalizowana. Dodaliśmy też nowy interfejs APIgetConfiguration()
dla programistów bibliotek, który umożliwia uzyskanie konfiguracji, z którą została zainicjowana bibliotekaWorkManager
. (I6eff3, b/212300336)
Wersja 2.8.0-alpha01
12 stycznia 2022 r.
androidx.work:work-*:2.8.0-alpha01
został zwolniony. Wersja 2.8.0-alpha01 zawiera te commity.
Zmiany w interfejsie API
- Dodano pomocnicze metody
WorkQuery.fromStates
,WorkQuery.fromUniqueWorkNames
,WorkQuery.fromTags
, które umożliwiają bezpośrednie tworzenie zapytania WorkQuery. (If48f2, b/199919736) - Dodaje eksperymentalne metody BuildCompat dla przyszłych pakietów SDK (Iafd82, b/207528937).
- Dodano
getForegroundInfo
doWorker
. (Ic1ead) - Dodano pomocnicze metody
WorkQuery.fromIds
do tworzenia zapytań roboczych bezpośrednio z identyfikatorów. (Ie5bdf, b/199919736) - Metoda RxWorker ma teraz funkcję
setForeground
, która zwraca wartośćCompletable
. Można jej używać zamiast funkcjisetForegroundInfoAsync
, która zwraca wartośćListenableFuture
. (I85156) - W RxWorker dla RxJava 2 jest teraz dostępna metoda
getForegroundInfo
z wynikiemSingle
, którą można użyć zamiast metodygetForegroundInfoAsync
z wynikiemListenableFuture
. (I21c91, b/203851459) - W wersji RxWorker dla RxJava 3 dodano metodę
getForegroundInfo
, która zwraca wartośćSingle
. Można jej używać zamiast metodygetForegroundInfoAsync
, która zwraca wartośćListenableFuture
. (I1ca8a) - Metoda RxWorker ma teraz funkcję
setForeground
, która zwraca wartośćCompletable
. Można jej używać zamiast funkcjisetForegroundInfoAsync
, która zwraca wartośćListenableFuture
. (I992a3, b/203851459)
Poprawki błędów
- Rozpowszechnianie anulowań w
CoroutineScope
wListenableFuture
przy użyciususpendCancellableCoroutine
. (I77e63)
Wersja 2.7
Wersja 2.7.1
17 listopada 2021 r.
androidx.work:work-*:2.7.1
został zwolniony. Wersja 2.7.1 zawiera te commity.
Poprawki błędów
- Anulowania w
CoroutineScope
są przekazywane doListenableFuture
, gdy używaszsuspendCancellableCoroutine
. (I77e63) - Wyjątek jest zgłaszany natychmiast, gdy opóźnione żądania pracy są oznaczone jako przyspieszone. bef1762
Wersja 2.7.0
13 października 2021 r.
androidx.work:work-*:2.7.0
został zwolniony. Wersja 2.7.0 zawiera te commity.
Ważne zmiany od wersji 2.6.0
WorkManager wprowadza nowy interfejs API
WorkRequest.Builder.setExpedited(...)
, który ułatwia stosowanie ograniczeń usług działających na pierwszym planie w Androidzie 12.Gdy używasz
setExpedited(...)
, WorkManager deleguje zadania przyspieszone w JobSchedulerze od Androida 12, zapewniając jednocześnie zgodność wsteczną w poprzednich wersjach Androida przez delegowanie do usługi na pierwszym planie.
Wersja 2.7.0-rc01
29 września 2021 r.
androidx.work:work-*:2.7.0-rc01
został zwolniony. Wersja 2.7.0-rc01 zawiera te zatwierdzenia.
Ta wersja jest identyczna z androidx.work:work-*:2.7.0-beta01
.
Wersja 2.7.0-beta01
1 września 2021 roku
androidx.work:work-*:2.7.0-beta01
został zwolniony. Wersja 2.7.0-beta01 zawiera te commity.
Nowe funkcje
- Zmniejsz współzawodnictwo SQLite w wielu procesach podczas inicjowania WorkManagera.
Zmiany w interfejsie API
- Usuń interfejsy API
@ExperimentalExpeditedWork
, ponieważ interfejsy API platformy docelowej w przypadku Androida 12 (S) są stabilne. (aosp/1792806)
Poprawki błędów
- Udostępnij lepszy komunikat o błędzie dla pracowników przyspieszonych, którzy nie implementują
getForegroundInfoAsync()
. (aosp/1809376)
Wersja 2.7.0-alpha05
21 lipca 2021 r.
androidx.work:work-*:2.7.0-alpha05
został zwolniony. Wersja 2.7.0-alpha05 zawiera te commity.
Ta wersja zawiera też poprawki błędów z wersji WorkManagera2.6.0-beta02
.
Wersja 2.7.0-alpha04
2 czerwca 2021 r.
androidx.work:work-*:2.7.0-alpha04
został zwolniony.
Ta wersja zawiera też zmiany z wersji 2.6.0-beta01.
Zmiany w interfejsie API
- Właściwość
ListenableWorker.setForegroundAsync()
nie jest już wycofana. - W miarę możliwości zalecamy korzystanie z interfejsu
WorkRequest.Builder.setExpedited(...)
API. Aby lepiej obsługiwać sytuacje, w których aplikacja nie podlega ograniczeniom usługi na pierwszym planie, deweloperzy mogą korzystać z interfejsu APIListenableWorker.setForegroundAsync()
. - Jeśli wywołanie
ListenableWorker.setForegroundAsync()
nastąpi, gdy aplikacja podlega ograniczeniom dotyczącym usług na pierwszym planie, zostanie rzucony wyjątek ForegroundServiceStartNotAllowedException.
Poprawki błędów
- Gdy przyspieszone zadania zostaną ponownie zaplanowane, nie będą już przyspieszone. Stają się one zwykłymi zadaniami.
Wersja 2.7.0-alpha03
21 kwietnia 2021 r.
androidx.work:work-*:2.7.0-alpha03
został zwolniony. Wersja 2.7.0-alpha03 zawiera te commity.
Nowe funkcje
Z WorkManagera
2.6.0-alpha02
: dodaje obsługę wątków, które mogą działać w dowolnym procesie. (Iaf200)W WorkManagerze
2.6.0-alpha02
: dodanoRemoteCoroutineWorker
, czyli implementacjęRemoteListenableWorker
, która może się łączyć z procesem zdalnym. (I30578)
Zmiany w interfejsie API
- W WorkManagerze
2.6.0-alpha02
:dodaliśmy obsługę ograniczenia sieciTEMPORARILY_UNMETERED
. (I08d5e) - Z WorkManagera
2.6.0-alpha02
: obsługa procesów wieloprocesowych dlasetProgressAsync()
. (Ib6d08) - W WorkManagerze
2.6.0-alpha02
: ustawWorkManagerInitializer
jako publiczne, aby inneandroidx.startup.Initializer
mogły ich używać jako zależności. (I5ab11)
Wersja 2.7.0-alpha02
10 marca 2021 r.
androidx.work:work-*:2.7.0-alpha02
został zwolniony. Wersja 2.7.0-alpha02 zawiera te commity.
Poprawki błędów
- Ujawnij zmienność
PendingIntent
, aby naprawić błąd powodujący awarię podczas kierowania na Androida 12. (b/180884673)
Wersja 2.7.0-alpha01
18 lutego 2021 r.
androidx.work:work-*:2.7.0-alpha01
został zwolniony. Wersja 2.7.0-alpha01 zawiera te commity.
Nowe funkcje
WorkManager wprowadza nowy interfejs API
WorkRequest.Builder.setExpedited(...)
, który uwzględnia ograniczenia usług na pierwszym planie w Androidzie 12.Aplikacje nie mogą już uruchamiać usługi na pierwszym planie, gdy działają w tle. Aby lepiej obsługiwać długotrwałe zadania, które były wcześniej powiązane z cyklem życia usługi na pierwszym planie, aplikacje mogą oznaczać
WorkRequest
jako przyspieszone.Ten interfejs API zastępuje interfejsy API
setForegroundAsync(...)
/setForeground(...)
, które zostały wycofane.Gdy używasz
setExpedited(...)
, WorkManager deleguje zadania przyspieszone doJobScheduler
, począwszy od Androida 12, zapewniając jednocześnie zgodność wsteczną w poprzednich wersjach Androida przez delegowanie do usług na pierwszym planie.
Zmiany w interfejsie API
- Dodano obsługę przyspieszonych
WorkRequest
.
Wersja 2.6.0
Wersja 2.6.0
1 września 2021 roku
androidx.work:work-*:2.6.0
został zwolniony. Wersja 2.6.0 zawiera te commity.
2.6.0
nie jest zgodna z aplikacjami kierowanymi na Androida 12 (S). Należy użyć wersji 2.7.0
.Ważne zmiany od wersji 2.5.0
WorkManager używa teraz funkcji
androidx.startup
do inicjowania WorkManagera. Jeśli do inicjowania WorkManagera w przeszłości używanotools:node="remove"
ContentProvider
, wykonaj te czynności.<provider android:name="androidx.startup.InitializationProvider" android:authorities=\"${applicationId}.androidx-startup" android:exported="false" tools:node=\"merge"> <!-- If you are using androidx.startup to initialize other components --> <meta-data android:name="androidx.work.WorkManagerInitializer" android:value="androidx.startup" tools:node="remove" /> </provider>
<!-- If you want to disable android.startup completely. --> <provider android:name="androidx.startup.InitializationProvider" android:authorities="${applicationId}.androidx-startup" tools:node="remove" />
Dodano obsługę instancji roboczych, które mogą działać w dowolnym procesie. (Iaf200)
Dodano klasę
RemoteCoroutineWorker
, która jest implementacją klasy RemoteListenableWorker i może się łączyć z procesem zdalnym. (I30578)
Wersja 2.6.0-rc01
4 sierpnia 2021 r.
androidx.work:work-*:2.6.0-rc01
został zwolniony. Wersja 2.6.0-rc01 zawiera te commity.
Ta wersja jest identyczna z androidx.work:work-*:2.6.0-beta02
.
Wersja 2.6.0-beta02
21 lipca 2021 r.
androidx.work:work-*:2.6.0-beta02
został zwolniony. Wersja 2.6.0-beta02 zawiera te commity.
Poprawki błędów
RemoteWorkManager
jest teraz prawidłowo odłączany odRemoteWorkManagerService
, co pozwalaRemoteWorkManagerService
na prawidłowe wyczyszczenie. aosp/1730694RemoteListenableWorker
jest teraz prawidłowo odłączany odRemoteWorkerService
, co pozwalaRemoteWorkerService
prawidłowo usunąć dane. aosp/1743817ForceStopRunnable
działa teraz tylko w ramach procesu głównej aplikacji. Jest to optymalizacja, która zapobiega rywalizacji o zasoby w przypadku aplikacji korzystających z wielu procesów. aosp/1749180, aosp/1761729
Wersja 2.6.0-beta01
2 czerwca 2021 r.
androidx.work:work-*:2.6.0-beta01
został zwolniony. Wersja 2.6.0-beta01 zawiera te commity.
Ta wersja zawiera drobne ulepszenia dokumentacji. Ta wersja jest w dużej mierze identyczna z 2.6.0-alpha02.
Wersja 2.6.0-alpha02
21 kwietnia 2021 r.
androidx.work:work-*:2.6.0-alpha02
został zwolniony. Wersja 2.6.0-alpha02 zawiera te commity.
Nowe funkcje
Dodaje obsługę instancji roboczych, które mogą działać w dowolnym procesie. (Iaf200)
Dodano
RemoteCoroutineWorker
, czyli implementacjęRemoteListenableWorker
, która może się łączyć z procesem zdalnym. (I30578)
Zmiany w interfejsie API
- Dodano obsługę ograniczenia sieci
TEMPORARILY_UNMETERED
. (I08d5e) - Obsługa procesów wieloprocesowych w
setProgressAsync()
. (Ib6d08) - Upublicznij
WorkManagerInitializer
, aby inneandroidx.startup.Initializer
mogły używać tych zależności. (I5ab11)
Wersja 2.6.0-alpha01
24 marca 2021 r.
androidx.work:work-*:2.6.0-alpha01
został zwolniony. Wersja 2.6.0-alpha01 zawiera te commity.
Nowe funkcje
WorkManager
używa teraz interfejsuandroidx.startup
do inicjowania WorkManager. Wcześniej była to wykonywana przezandroidx.work.impl.WorkManagerInitializer
. (aosp/1608813)Jeśli w przeszłości do zainicjowania cyklu życia procesu używany był element
tools:node="remove"
, który jest elementemContentProvider
, wykonaj te czynności.<provider android:name="androidx.startup.InitializationProvider" android:authorities=\"${applicationId}.androidx-startup" android:exported="false" tools:node=\"merge"> <!-- If you are using androidx.startup to initialize other components --> <meta-data android:name="androidx.work.impl.WorkManagerInitializer" android:value="androidx.startup" tools:node="remove" /> </provider>
(lub)
<!-- If you want to disable android.startup completely. --> <provider android:name="androidx.startup.InitializationProvider" android:authorities="${applicationId}.androidx-startup" tools:node="remove"> </provider>
Zmiany w interfejsie API
- Dodaj interfejs API
Result.getOutputData()
, który zwracaoutputData
obiektu ListenableWorker. (Ie51e3)
Poprawki błędów
- Dodaj obejście błędu OEM, który powoduje wyjątek
SecurityException
podczas korzystania z interfejsów APIAlarmManager
. (aosp/1587518)
Wersja 2.5.0
Wersja 2.5.0
27 stycznia 2021 r.
androidx.work:work-*:2.5.0
został zwolniony. Wersja 2.5.0 zawiera te zatwierdzenia.
Najważniejsze zmiany od wersji 2.4.0
- Nowy artefakt
:work:work-multiprocess
dla aplikacji, które korzystają z wielu procesów. Dzięki temu zwiększysz wydajność, ponieważ zaplanowanie zadań zostanie zjednolicone w ramach jednego procesu.- Aby używać aplikacji
work-multiprocess
, zdefiniuj zależność od:implementation "androidx.work:work-multiprocess:2.5.0"
- Wyznacz proces główny za pomocą metody Configuration.Builder.setDefaultProcessName(String).
- Korzystając z
work-multiprocess
, możesz też używać Menedżera pracy zdalnej do zarządzaniaWorkRequest
. RemoteWorkManager zawsze sięga do wyznaczonego procesu. Planista wewnątrz procesu działa również w wybranym procesie.
- Aby używać aplikacji
- Czasami
ActivityManager
nie może utworzyć instancjiJobService
, aby rozpocząć zadanie. Spowoduje to, że zadanie zostanie po cichu przerwane z powodu błędu platformy.WorkManager
zapewnia teraz, że podczas inicjowaniaApplication
za pomocą zadań uzgadniających są tworzone zadania zapasowe dla każdegoWorkRequest
. Znacznie to zwiększa niezawodność wykonywania zadań. (b/172475041, aosp/1489577) WorkManager
ogranicza wzrost bazy danych, skracając czas buforowania, w którymWorkRequest
są śledzone po zakończeniuWorkRequest
. Czas trwania wynosił7
dni. Został on skrócony do1
dni plus czas określony w parametrze keepResultsForAtLeast. (aosp/1419708)- Aby ułatwić testowanie, w bibliotece
TestListenableWorkerBuilder
dodano obsługę klasy kwalifikowanej, która rozszerza klasęListenableWorker
. (aosp/1443299, b/169787349) - Inspektor WorkManager jest teraz dostępny w Android Studio Arctic Fox.
Wersja 2.5.0-rc01
13 stycznia 2021 r.
androidx.work:work-*:2.5.0-rc01
został zwolniony. Wersja 2.5.0-rc01 zawiera te zatwierdzenia.
Poprawki błędów
- Rozwiązaliśmy błąd polegający na tym, że po zaktualizowaniu elementów za pomocą interfejsu API opartego na interfejsie
WorkQuery
nieprawidłowa była wartość atrybutugetWorkInfosLiveData
. (aosp/1540566, b/173769028) - Naprawiono błąd, który w niektórych rzadkich przypadkach powodował, że transakcje bazy danych nie były oznaczane jako udane. Może to powodować problemy na niektórych urządzeniach Motorola. (aosp/1535368, b/175944460)
- Naprawiono błąd polegający na ignorowaniu
NoSuchElementException
podczas próby odłączenia od martwego procesu. (aosp/1530589) - Zmień
ConstraintTrackingWorker
tak, abyListenableWorker
zatrzymywał się tylko wtedy, gdy nie został jeszcze zatrzymany. (aosp/1496844, b/172946965) - Zaktualizuj biblioteki androidx.work, aby były przeznaczone dla Java 8 (Ibd2f2).
Wersja 2.5.0-beta02
2 grudnia 2020 r.
androidx.work:work-*:2.5.0-beta02
został zwolniony. Wersja 2.5.0-beta02 zawiera te commity.
Poprawki błędów
- Naprawiono błąd w
androidx.work:work-multiprocess
, w którym WorkManager przypadkowo blokował wątek wywołania podczas próby połączenia z wyznaczonym procesem. (aosp/1475538) - Naprawiliśmy błąd polegający na tym, że
PeriodicWorkRequest
nie były prawidłowo uzgadniane. (b/172475041, aosp/1489577) - Dodano obejście błędu platformy podczas zatrzymywania usługi na pierwszym planie podczas korzystania z interfejsów API
setForeground*
. (b/170924044, aosp/1489901)
Wersja 2.5.0-beta01
28 października 2020 r.
androidx.work:work-*:2.5.0-beta01
został zwolniony. Wersja 2.5.0-beta01 zawiera te commity.
Nowe funkcje
WorkManager
automatycznie ogranicza liczbęWorkRequest
, które mogą być pobierane przez algorytm szeregowania w ramach procesu. Żądania są nadal wykonywane w kolejności FIFO. (aosp/1455228)WorkManager
próbuje przywrócić dane, gdy baza danych aplikacji jest w złym stanie. (aosp/1463103)
Poprawki błędów
- Gdy
ListenableWorker
zostaną przerwane, natychmiast oznacz je jakoENQUEUED
, aby można je było ponownie zaplanować. (aosp/1455618, b/170273988)
Wersja 2.5.0-alpha03
14 października 2020 r.
androidx.work:work-*:2.5.0-alpha03
został zwolniony. Wersja 2.5.0-alpha03 zawiera te commity.
Zmiany w interfejsie API
- Typy
TestListenableWorkerBuilder
iTestWorkerBuilder
nie używają formatu surowego. (I883ad, b/169787349)
Poprawki błędów
- Użyj polecenia
ApplicationInfo
, aby określić nazwę domyślnego procesu aplikacji. (b/168716641, aosp/1429950) - Popraw reguły widoczności w przypadku
RemoteWorkManager
iRemoteWorkContinuation
. Te interfejsy API nie są już oznaczone jako@Restricted
. (aosp/1432091) - Popraw reguły Proguard dla
:work:work-multiprocess
. (aosp/1432091) - Poprawa cyklu życia powiadomień w przypadku długotrwałych zadań związanych z usługą na pierwszym planie. (b/168502234, aosp/1431331)
Wersja 2.5.0-alpha02
16 września 2020 roku
androidx.work:work-*:2.5.0-alpha02
został zwolniony. Wersja 2.5.0-alpha02 zawiera te commity.
Nowe funkcje
- Dodaj interfejs API do WorkQuery, aby móc używać zapytań
id
do zapytańWorkInfo
. (aosp/1412372, b/157335295) - WorkManager lepiej obsługuje aplikacje, które korzystają z wielu procesów, dzięki nowemu artefaktowi (
androidx.work:work-multiprocess:*
). Ten nowy artefakt pomaga rozwiązać kilka problemów, z którymi borykają się duże aplikacje, w tym:- WorkManager musi zwykle być inicjowany w każdej procedurze aplikacji. To nie jest dobre, ponieważ zwiększa to współzawodnictwo SQLite, co z kolei powoduje inne problemy. WorkManager ma teraz nowe interfejsy API, które można wykorzystać do wyznaczenia głównego procesu aplikacji za pomocą
Configuration#setDefaultProcessName(processName)
.processName
to pełna nazwa procesu, która wygląda jakpackageName:processName
(np.com.example:remote
). - Zestaw nowych interfejsów API:
RemoteWorkManager
iRemoteWorkContinuation
doenqueue
,cancel
iquery
. Te interfejsy API nie obejmują wariantówLiveData
, aby uniknąć kolizji SQLite w wielu procesach. Wszystkie wywołania funkcjienqueue
,cancel
iquery
są przekierowywane do procesu aplikacjiprimary
za pomocą AIDL i zwracają płynnyListenableFuture
. (aosp/1392657, aosp/1411210, aosp/1412215, aosp/1417713).
- WorkManager musi zwykle być inicjowany w każdej procedurze aplikacji. To nie jest dobre, ponieważ zwiększa to współzawodnictwo SQLite, co z kolei powoduje inne problemy. WorkManager ma teraz nowe interfejsy API, które można wykorzystać do wyznaczenia głównego procesu aplikacji za pomocą
Zmiany w interfejsie API
- WorkManager usuwa teraz ukończone
WorkRequest
, które nie mają niepełnych zależności, bardziej agresywnie. Czas trwania bufora zmieniono z7
dni na1
dzień. (aosp/1419708)
Poprawki błędów
- WorkManager synchronizuje teraz zadania w sposób zapobiegawczy, aby zadania
WorkRequest
iJobScheduler
były zsynchronizowane po zainicjowaniu zadaniaWorkManager
. (aosp/1412794, b/166292069)
Wersja 2.5.0-alpha01
19 sierpnia 2020 r.
androidx.work:work-*:2.5.0-alpha01
został zwolniony. Wersja 2.5.0-alpha01 zawiera te commity.
Nowe funkcje
- zmiany wewnętrznych interfejsów API, które pozwolą nam w przyszłości udostępniać lepsze narzędzia do obsługi
WorkManager
; Wkrótce podamy więcej informacji.
Poprawki błędów
- Obsługa
SecurityException
podczas śledzenia stanu sieci na niektórych urządzeniach. (aosp/1396969)
Darowizna zewnętrzna
- Poprawiono dokumentację
ArrayCreatingInputMerger
(Zac Sweers, github/43).
Wersja 2.4.0
Wersja 2.4.0
22 lipca 2020 r.
androidx.work:work-*:2.4.0
został zwolniony. Wersja 2.4.0 zawiera te zatwierdzenia.
Najważniejsze zmiany od wersji 2.3.0
- Planista
WorkManager
jest teraz bardziej wydajny. Wcześniej w ramach tej opcjiScheduler
brano pod uwagę tylko wykonywanie pracy, która nie została opóźniona i dla której spełniono ograniczenia. Obecnie planista w trakcie przetwarzania śledziWorkRequest
, które mogą zostać wykonane w przyszłości, w tym żądania pracy okresowej. W przypadkuScheduler
w trakcie przetwarzania nie są też przestrzegane limity harmonogramowania (ale nadal jest on ograniczony do rozmiaruExecutor
używanego przez WorkManager). Oznacza to, że aplikacja może teraz wykonywać znacznie więcej poleceń WorkRequest, gdy jest na pierwszym planie. Aby zarządzać wykonywaniem opóźnionych zadań na pierwszym planie,WorkManager
wprowadza też nową konfigurowalną funkcjęRunnableScheduler
. (aosp/1185778) - WorkManager obsługuje teraz RxJava 3. Aby używać RxJava 3, musisz uwzględnić tę zależność:
implementation "androidx.work:work-rxjava3:2.4.0"
. (aosp/1277904) - Dodano możliwość wysyłania zapytań o
WorkInfo
za pomocąWorkQuery
. Jest to przydatne, gdy deweloperzy chcą wysyłać zapytania dotycząceWorkInfo
z użyciem kombinacji wielu atrybutów. Więcej informacji znajdziesz w artykułachWorkQuery.Builder.fromStates(...)
,WorkQuery.Builder. fromTags(...)
iWorkQuery.Builder.fromUniqueWorkNames(...)
. (aosp/1253230, b/143847546) Dodaj możliwość żądania informacji diagnostycznych z
WorkManager
za pomocą:adb shell am broadcast -a "androidx.work.diagnostics.REQUEST_DIAGNOSTICS" -p "<your_app_package_name>"
Zawiera on wiele przydatnych informacji, w tym:
- WorkRequests, które zostały ukończone w ciągu ostatnich 24 godzin.
- WorkRequests, które są obecnie uruchamiane.
- Zaplanowane zgłoszenia dotyczące pracy. (aosp/1235501)
Dodaj
ExistingWorkPolicy.APPEND_OR_REPLACE
, który jest podobny doAPPEND
, ale zastępuje łańcuch, który anulował lub nie spełnił wymagań wstępnych. (b/134613984, aosp/1199640)Dodanie niestandardowego
RunnableScheduler
do śledzenia WorkRequests, które muszą zostać wykonane w przyszłości. Jest on używany przez Schedulera w ramach procesu. (aosp/1203944)Dodano obsługę dynamicznego dodawania fabryk do delegowania, gdy używasz
DelegatingWorkerFactory
. (b/156289105, aosp/1309745)Dopasuj śledzenie ograniczeń
BATTERY_NOT_LOW
do platformy. (aosp/1312583)Do określania nazwy procesu harmonogram w ramach procesu korzysta teraz z lepszych interfejsów API. Jest to przydatne, aby lepiej obsługiwać aplikacje korzystające z wielu procesów. (aosp/1324732)
Nowe reguły Lint, które nakładają:
- Korzystanie z właściwych uprawnień
foregroundServiceType
podczas korzystania z interfejsów APIsetForegroundAsync()
. (b/147873061, aosp/1215915) - Określanie identyfikatorów JobScheduler, których WorkManager powinien używać podczas bezpośredniego korzystania z interfejsów JobService. aosp/1223567
- Dodano nową regułę lint, która zapewnia, że implementacje
ListenableWorker
są terazpublic
, gdy używasz domyślnegoWorkerFactory
. (aosp/1291262)
- Korzystanie z właściwych uprawnień
Wywołania do
setForegroundAsync()
, które nie zostaną zakończone przed zakończeniemListenableWorker
, będą teraz sygnalizowane za pomocąIllegalStateException
w zwróconymListenableFuture
. (aosp/1262743)Rozwiązanie błędu polegającego na tym, że
ForegroundService
nie jest zatrzymywany po przerwaniu działaniaWorker
na pierwszym planie. (b/155579898, aosp/1302153)Naprawiono błąd, który powodował, że usługa
WorkManager
próbowała wykonać wiele instancji klasyWorker
powiązanej z usługą na pierwszym planie (b/156310133, aosp/1309853).
Wersja 2.4.0-rc01
24 czerwca 2020 r.
androidx.work:work-*:2.4.0-rc01
został zwolniony. Wersja 2.4.0-rc01 zawiera te commity.
Poprawki błędów
- Do określania nazwy procesu harmonogram w ramach procesu korzysta teraz z lepszych interfejsów API. Jest to przydatne, aby lepiej obsługiwać aplikacje korzystające z wielu procesów. (aosp/1324732)
Wersja 2.4.0-beta01
20 maja 2020 r.
androidx.work:work-gcm:2.4.0-beta01
, androidx.work:work-runtime:2.4.0-beta01
, androidx.work:work-runtime-ktx:2.4.0-beta01
, androidx.work:work-rxjava2:2.4.0-beta01
i androidx.work:work-testing:2.4.0-beta01
są zwolnione. Wersja 2.4.0-beta01 zawiera te commity.
Poprawki błędów
- Rozwiązanie błędu polegającego na tym, że
ForegroundService
nie jest zatrzymywany po przerwaniu działaniaWorker
na pierwszym planie. (b/155579898, aosp/1302153) - Naprawiono błąd, który powodował, że
WorkManager
próbował wykonać wiele instancjiWorker
powiązanych z usługą na pierwszym planie (b/156310133, aosp/1309853). - Dodanie obsługi dynamicznego dodawania fabryk do delegowania, gdy używasz
DelegatingWorkerFactory
. (b/156289105, aosp/1309745) - Dopasuj śledzenie ograniczeń
BATTERY_NOT_LOW
do platformy. (aosp/1312583)
Wersja 2.4.0-alpha03
29 kwietnia 2020 r.
androidx.work:work-*:2.4.0-alpha03
został zwolniony. Wersja 2.4.0-alpha03 zawiera te commity.
Nowe funkcje
- WorkManager obsługuje teraz RxJava 3. Aby używać RxJava 3, musisz uwzględnić tę zależność:
implementation "androidx.work:work-rxjava3:2.4.0-alpha03"
. (aosp/1277904) - Dodaliśmy nową regułę lint, która zapewnia, że implementacje
ListenableWorker
są terazpublic
, gdy używasz domyślnegoWorkerFactory
. (aosp/1291262)
Zmiany w interfejsie API
- Wywołanie funkcji
setProgressAsync()
po zakończeniu wykonywania funkcjiListenableWorker
spowoduje teraz wysłanie sygnałuException
za pomocą funkcjiListenableFuture
. (aosp/1285494) - Element
WorkQuery.Builder
jest teraz oznaczony jakofinal
. (aosp/1275037) WorkQuery.Builder
metody fabrycznewithStates
,withTags
iwithUniqueWorkNames
zostały odpowiednio przemianowane nafromStates
,fromTags
ifromUniqueWorkNames
. (aosp/1280287)
Poprawki błędów
- Podczas śledzenia stanu sieci urządzenia ignoruj wartości
SecurityException
. (b/153246136, aosp/1280813)
Wersja 2.4.0-alpha02
1 kwietnia 2020 r.
androidx.work:work-*:2.4.0-alpha02
został zwolniony. Wersja 2.4.0-alpha02 zawiera te commity.
Nowe funkcje
- Dodano nową regułę Lint, która ostrzega, gdy
WorkRequest
wymaga zarównoConstraints.setRequiresCharging(...)
, jak iConstraints.setRequiresDeviceIdle(...)
. Niektóre urządzenia nigdy nie są ładowane i nie są nieaktywne w tym samym czasie. Oznacza to, że takie żądania będą wykonywane rzadziej niż oczekiwano. (aosp/1253840)
Zmiany w interfejsie API
Dodano możliwość wysyłania zapytań o
WorkInfo
za pomocąWorkQuery
. Jest to przydatne, gdy deweloperzy chcą wysyłać zapytania dotycząceWorkInfo
z użyciem kombinacji wielu atrybutów. Więcej informacji znajdziesz w artykułachWorkQuery.Builder withStates(...)
,WorkQuery.Builder withTags(...)
iWorkQuery.Builder withUniqueWorkNames(...)
. (aosp/1253230, b/143847546)Wywołania do
setForegroundAsync()
, które nie zostaną ukończone przed zakończeniemListenableWorker
, będą teraz sygnalizowane za pomocąIllegalStateException
w zwróconymListenableFuture
. (aosp/1262743)
Poprawki błędów
- Naprawiono regułę lint, która sprawdza nieprawidłowe długości interwałów dla
PeriodicWorkRequest
. (aosp/1254846, b/152606442)
Wersja 2.4.0-alpha01
4 marca 2020 r.
androidx.work:work-*:2.4.0-alpha01
został zwolniony. Wersja 2.4.0-alpha01 zawiera te commity.
Nowe funkcje
Planista
WorkManager
jest teraz bardziej wydajny. Wcześniej harmonogram w trakcie wykonywania brał pod uwagę tylko wykonywanie zadań, które nie były opóźnione i których ograniczenia zostały spełnione. Teraz harmonogram śledzenia procesów śledziWorkRequest
, które mogą zostać wykonane w przyszłości, w tymPeriodicWorkRequest
. Scheduler w ramach procesu nie przestrzega limitów harmonogramowania (ale nadal jest ograniczony do rozmiaruExecutor
używanego przez WorkManager). Oznacza to, że aplikacja może teraz wykonać znacznie więcejWorkRequest
, gdy działa na pierwszym planie. (aosp/1185778)Dodano możliwość żądania informacji diagnostycznych z WorkManagera za pomocą
adb shell am broadcast -a "androidx.work.diagnostics.REQUEST_DIAGNOSTICS" -p "<your_app_package_name>"
. Zawiera on wiele przydatnych informacji, w tym:- WorkRequests, które zostały ukończone w ciągu ostatnich 24 godzin.
- WorkRequests, które są obecnie uruchamiane.
- Zaplanowane zadania. (aosp/1235501)
Nowe reguły Lint, które nakładają:
- Korzystanie z właściwych uprawnień
foregroundServiceType
podczas korzystania z interfejsów APIsetForegroundAsync()
. (b/147873061, aosp/1215915) - Określanie identyfikatorów
JobScheduler
, którychWorkManager
powinien używać podczas bezpośredniego korzystania z interfejsów APIJobService
. (aosp/1223567)
- Korzystanie z właściwych uprawnień
Zmiany w interfejsie API
Dodaj
ExistingWorkPolicy.APPEND_OR_REPLACE
, która jest podobna doAPPEND
, ale zastępuje łańcuch, który anulował lub nie spełnił wymagań wstępnych. (b/134613984, aosp/1199640)Umożliw dodanie niestandardowego
RunnableScheduler
do śledzeniaWorkRequest
, które muszą zostać wykonane w przyszłości. Jest on używany przez Schedulera w ramach procesu. (aosp/1203944)
Poprawki błędów
- Funkcja
setProgress()
w funkcjiRxWorker
została wycofana, ponieważ wcześniej zwracała wartośćSingle<Void>
, która jest nieprawidłowym typem. Dodaliśmy nowy interfejs APIsetCompletableProgress()
, który zamiastCompletable
zwracaCompletable
. Dodaliśmy też nowe reguły Lint, które ułatwiają migrację na nowe interfejsy API. (b/150080946, aosp/1242665)
Wersja 2.3.4
Wersja 2.3.4
18 marca 2020 r.
androidx.work:work-*:2.3.4
został zwolniony. Wersja 2.3.4 zawiera te commity.
Poprawki błędów
- Usunęliśmy błąd, który powodował uruchamianie wielu instancji długo działających
Worker
po przekroczeniu 10-minutowego okna wykonywania. (aosp/1247484, b/150553353) - Naprawka dotycząca narzędzia lint w WorkManager (
IssueRegistry
). Dziękujemy @ZacSweers z Slacka za Twój wkład. (aosp/1217923)
Wersja 2.3.3
Wersja 2.3.3
4 marca 2020 r.
androidx.work:work-*:2.3.3
został zwolniony. Wersja 2.3.3 zawiera te zatwierdzenia.
Poprawki błędów
- Naprawiliśmy błąd, który powodował, że jeśli
Worker
zostało przerwane, nie było ono ponownie planowane. (b/150325687, aosp/1246571)
Wersja 2.3.2
Wersja 2.3.2
19 lutego 2020 r.
androidx.work:work-*:2.3.2
zostały zwolnione. Wersja 2.3.2 zawiera te commity.
Poprawki błędów
- Rozwiązanie problemu, który w rzadkich przypadkach powodował, że WorkManager przekraczał limit 100 zadań w JobSchedulerze. (aosp/1226859, b/149092520)
- Naprawiono warunek wyścigu w ConstraintControllers. (aosp/1220100)
- Ulepszony cykl życia usługi na pierwszym planie w przypadku długotrwałych procesów. (aosp/1226295)
- Ulepszono zarządzanie anulowaniem powiadomień w przypadku długotrwałych procesów Workera po anulowaniu Workera. (aosp/1228346)
Wersja 2.3.1
Wersja 2.3.1
5 lutego 2020 r.
androidx.work:work-*:2.3.1
został zwolniony. Wersja 2.3.1 zawiera te zatwierdzenia:
Poprawki błędów
- Lepsze zarządzanie cyklem życia
Notification
w przypadku długotrwałych procesówWorker
, które działają, gdy aktywny jest procesService
na pierwszym planie. (aosp/1218539, b/147249312) WorkManager
zależy teraz od stabilnej wersjiandroidx.sqlite:sqlite-framework:2.1.0
. (aosp/1217729)- Dodaliśmy reguły lint, aby zapewnić, że w
AndroidManifest.xml
jest określony parametrforegroundServiceType
, gdy wForegroundInfo
są używane parametryforegroundServiceType
. (aosp/1214207, b/147873061)
Wersja 2.3.0
Wersja 2.3.0
22 stycznia 2020 r.
androidx.work:work-*:2.3.0
jest publikowany bez zmian od 2.3.0-rc01
. Wersja 2.3.0 zawiera te zatwierdzenia:
Ważne zmiany od wersji 2.2.0
- Obsługa długich lub ważnych zadań za pomocą
ListenableWorker#setForegroundAsync()
. - Obsługa postępu instancji roboczej za pomocą
ListenableWorker#setProgressAsync()
. - WorkManager zawiera teraz dodatkowe reguły lint jako część biblioteki, co pomaga w wczesnej identyfikacji błędów.
Wersja 2.3.0-rc01
8 stycznia 2020 r.
androidx.work:work-*:2.3.0-rc01
został zwolniony. Wersja 2.3.0-rc01 zawiera te zatwierdzenia
Ta wersja jest identyczna z 2.3.0-beta02
.
Poprawki błędów
- Element
work-testing
określa teraz zależnośćapi
od elementuwork-runtime-ktx
. (aosp/1194410)
Wersja 2.3.0-beta02
18 grudnia 2019 r.
androidx.work:work-*:2.3.0-beta02
został zwolniony. Wersja 2.3.0-beta02 zawiera te zatwierdzenia:
Nowe funkcje
- Dodaliśmy lepszy komunikat o błędzie w przypadku nieodwracalnych wyjątków SQLite. (aosp/1185777)
- Dodano regułę lint, która zapewnia, że dostawca treści
androidx.work.impl.WorkManagerInitializer
zostanie usunięty zAndroidManifest.xml
podczas inicjalizacji na żądanie. (aosp/1167007) - Dodano ostrzeżenie o błędach, gdy
enqueue()
jest używane zamiastPeriodicWorkRequest
zamiastenqueueUniquePeriodicWork()
. (aosp/1166032)
Zmiany w interfejsie API
- Funkcja
ForegroundInfo
wymaga teraz określenianotificationId
, która ma być używana podczas korzystania z funkcjiListenableWorker.setForegroundAsync()
. To jest zmiana powodująca niezgodność. Dzięki temu możesz równolegle uruchamiać wiele długotrwałych zadań.Worker
WorkManager
lepiej zarządza też czasem trwania podanychNotification
. (b/145473554, aosp/1181208, asop/1181216, asop/1183577)
Poprawki błędów
- Naprawiliśmy błąd w implementacji AlarmManager, który powodował, że alarmy nie były prawidłowo usuwane. (aosp/1156444)
- Naprawiliśmy błąd, który powodował, że pusta lista
WorkRequest
powodowała tworzenie nieprawidłowego ciąguWorkContinuation
. (b/142835274, aosp/1157051)
Zmiany w zależnościach
- WorkManager używa teraz Room 2.2.2.
Wersja 2.3.0-beta01
20 listopada 2019 r.
androidx.work:work-*:2.3.0-beta01
został zwolniony. Wersja 2.3.0-beta01 zawiera te commity.
Nowe funkcje
- Dodaliśmy nową regułę lint, która zapobiega błędom programisty spowodowanym nieprawidłową implementacją
androidx.work.Configuration.Provider
podczas inicjalizacji na żądanie. aosp/1164559
Wersja 2.3.0-alpha03
23 października 2019 r.
androidx.work:work-*:2.3.0-alpha03
został zwolniony. Wersja 2.3.0-alpha03 zawiera te commity.
Nowe funkcje
- Dodano interfejs API
WorkManager.createCancelPendingIntent()
, który ułatwia anulowanieWorkRequest
bez konieczności rejestrowania kolejnego komponentu wAndroidManifest.xml
. Dzięki temu interfejsowi API możesz łatwo anulowaćWorkRequest
z poziomuNotification
. Spodziewamy się, że będzie to możliwe dzięki nowym interfejsom API na pierwszym planie w wersji 2.3.0. - WorkManager zależy teraz od wersji stabilnej
androidx.room:*:2.2.0
.
Zmiany w interfejsie API
- Zmieniliśmy nazwę interfejsu
ForegroundInfo.getNotificationType()
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ą. Zdarzają się one rzadko. (b/142580433, aosp/1141737)
Wersja 2.3.0-alpha02
9 października 2019 r.
androidx.work:work-*:2.3.0-alpha02
został zwolniony. Wersja 2.3.0-alpha02 zawiera te commity.
Nowe funkcje
- WorkManager obsługuje teraz długotrwałe lub ważne zadania, które powinny być utrzymywane przez system operacyjny. Więcej informacji znajdziesz w artykule
ListenableWorker#setForegroundAsync()
(lubCoroutineWorker#setForeground()
w przypadku języka Kotlin). (aosp/1133636)
Zmiany w interfejsie API
- Interfejs API
containsKey
w wersjiData
został przemianowany nahasKeyWithValueOfType
. Zmieniono też nazwę odpowiedniej metody rozszerzenia w bibliotecektx
. (b/141916545)
Poprawki błędów
- WorkManager przydziela pracę w sposób sprawiedliwy, gdy liczba
WorkRequest
oczekujących w kole zbliża się do limitów harmonogramowania. (aosp/1105766) - WorkManager wywołuje
ListenableWorker#onStopped()
tylko wtedy, gdy zadanie nie zostało jeszcze ukończone. (b/140055777) - WorkManager usuwa teraz informacje o postępach, gdy zadanie zostanie przerwane lub osiągnie stan końcowy. (aosp/1114572)
Data
ma teraz znacznie bardziej przydatną reprezentacjętoString()
. (b/140945323)Data
ma teraz lepszą metodęequals()
. Obsługuje teżdeepEquals
w przypadku typówArray
. (b/140922528)- WorkManager przechowuje teraz swoją wewnętrzną bazę danych i pliki z ustawieniami w katalogu bez kopii zapasowej. (b/114808216)
Wersja 2.3.0-alpha01
22 sierpnia 2019 r.
androidx.work:work-*:2.3.September 5, 20190-alpha01
został zwolniony. Zmiany zawarte w tej wersji znajdziesz tutaj.
Nowe funkcje
ListenableWorker
mogą teraz ustawiać postęp za pomocą interfejsu APIsetProgressAsync()
. Dodano też odpowiadający interfejs APIsuspend
-ingsetProgress
w interfejsieCoroutineWorker
oraz elementsetProgress
w interfejsieRxWorker
, który zwraca elementSingle<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żna wykorzystać do sprawdzenia, czy dane wejściowe doWorker
mają klucze o oczekiwanym typie. (b/117136838)- Obiekt
Data
można teraz serializować za pomocą funkcjiData.toByteArray()
iData.fromByteArray()
. Pamiętaj, że w przypadkuData
nie ma gwarancji wersji, dlatego nie przechowuj go ani nie używaj do komunikacji między aplikacjami. Można je bezpiecznie używać tylko w różnych procesach tej samej aplikacji. - Dodano możliwość określania
InputMergerFactory
za pomocąConfiguration.setInputMergerFactory
. (b/133273159)
Zmiany w interfejsie API
- WorkManager zwróci wystąpienie
IllegalStateException
, jeśliWorkerFactory
zwróci wystąpienieListenableWorker
, które zostało wcześniej wywołane. (b/139554406) - Aktualizacje dokumentacji dotyczące anulowania
ListenableFuture
i wywołania zwrotnegoonStopped()
wListenableWorker
. (b/138413671)
Poprawki błędów
- Scheduler w trakcie przetwarzania ignoruje teraz
WorkRequest
z ograniczeniemidle
. Te prośby są teraz odbierane przezJobScheduler
tylko wtedy, gdy urządzenie jest rzeczywiścieidle
. (aosp/1089779) TestScheduler
używa teraz prawidłowo określonego elementuExecutor
dla wewnętrznego wykonawcy zadań w testach. (aosp/1090749)
Wersja 2.2.0
Wersja 2.2.0
15 sierpnia 2019 r.
androidx.work:work-*:2.2.0
został zwolniony. Zmiany zawarte w tej wersji znajdziesz tutaj.
Ta wersja jest identyczna z androidx.work:work-*:2.2.0-rc01
.
Ważne zmiany w wersji 2.2.0 w porównaniu z 2.1.0
androidx.work:work-gcm:2.2.0
to nowy element Maven, który obsługuje używanie GCMNetworkManager jako harmonogramisty, gdy Usługi Google Play są dostępne na poziomie interfejsu API ≤ 22. Jest to opcjonalna zależność, która pomaga 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ę GCMNetworkManager. Jeśli Usługi Play są niedostępne, WorkManager na starszych urządzeniach będzie nadal używać interfejsu AlarmManager.
Wersja 2.2.0-rc01
30 lipca 2019 r.
androidx.work:work-*:2.2.0-rc01
został zwolniony. Zmiany zawarte w tej wersji znajdziesz tutaj.
Poprawki błędów
- Naprawiono błąd w implementacji AlarmManagera, który powodował przedwczesne wyłączenie usługi i w rzadkich przypadkach błąd
RejectedExecutionException
. (aosp/1092374) (b/138238197). - Dodano obejście problemu
NullPointerException
podczas korzystania z interfejsów APIJobScheduler
na niektórych urządzeniach. (aosp/1091020) (b/138364061), (b/138441699)
Wersja 2.2.0-beta02
19 lipca 2019 r.
androidx.work:work-*:2.2.0-beta02
został zwolniony. Zmiany zawarte w tej wersji znajdziesz tutaj.
Poprawki błędów
- Usunięto niezamierzoną zależność od jacoco, która została wprowadzona w
2.2.0-beta01
.
Wersja 2.2.0-beta01
17 lipca 2019 r.
androidx.work:work-*:2.2.0-beta01
został zwolniony. Zmiany zawarte w tej wersji znajdziesz tutaj.
org.jacoco:org.jacoco.agent:0.8.3
, która może spowodować niepowodzenie kompilacji. Zaktualizuj do najnowszej wersji, w której ta zależność została usunięta.Nowe funkcje
androidx.work:work-gcm:2.2.0-beta01
to nowy element Maven, który obsługuje używanie GCMNetworkManager jako harmonogramisty, gdy Usługi Google Play są dostępne na poziomie interfejsu API ≤ 22. Jest to opcjonalna zależność, która pomaga 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ę GCMNetworkManager. Jeśli Usługi Play są niedostępne, WorkManager na starszych urządzeniach będzie nadal używać interfejsu AlarmManager.
Poprawki błędów
- Naprawiono błąd
IllegalArgumentException
podczas śledzenia stanu sieci na tabletach Nvidia Shield K1. (aosp/1010188)
Wersja 2.1.0
Wersja 2.1.0
11 lipca 2019 r.
androidx.work:work-*:2.1.0
został zwolniony. Ta wersja jest identyczna z androidx.work:work-*:2.1.0-rc01
.
Ważne zmiany od wersji 2.0.1
work-runtime-ktx
wymaga teraz Javy 8. Jeśli napotkasz jakieś problemy, w formularzubuild.gradle
możesz dodać te informacje:kotlinOptions { jvmTarget = "1.8" }
- Dodano inicjowanie WorkManagera na żądanie, które tworzy WorkManagera tylko wtedy, gdy jest używany. b/127497100 Aby skonfigurować projekt na potrzeby inicjalizacji na żądanie:
- Wyłącz automatyczny inicjalizator.
- Zaimplementuj
Configuration.Provider
w obiekcie niestandardowymApplication
. - Zmień wszystkie odwołania do
WorkManager.getInstance()
naWorkManager.getInstance(Context)
. W ramach tej zmiany wycofujemyWorkManager.getInstance()
. Zawsze bezpieczniej jest wywołać nową funkcjęWorkManager.getInstance(Context)
, nawet jeśli nie wykonujesz inicjalizacji na żądanie.
PeriodicWorkRequest
obsługuje teraz początkowe opóźnienia. Aby ustawić początkowe opóźnienie, możesz użyć metodysetInitialDelay
w funkcjiPeriodicWorkRequest.Builder
. b/111404867- Dodano możliwość delegowania uprawnień do co najmniej 1 zarejestrowanego
WorkerFactory
za pomocąDelegatingWorkerFactory
. b/131435993 - Dodano możliwość dostosowywania
Executor
używanego przez WorkManager do wszystkich swoich wewnętrznych działań księgowych za pomocąConfiguration.Builder.setTaskExecutor
. - Dodano możliwość tworzenia testów jednostkowych klas
Worker
iListenableWorker
za pomocą artefaktuwork-testing
z elementamiTestWorkerBuilder
iTestListenableWorkerBuilder
.- 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 to maksymalnego rozmiaru obiektówData
. - WorkManager zależy teraz od
Room 2.1.0
, co powinno rozwiązać niektóre problemy z bazą danych.
Wersja 2.1.0-rc01
27 czerwca 2019 r.
androidx.work:work-*:2.1.0-rc01
został zwolniony. Zmiany zawarte w tej wersji znajdziesz tutaj.
Poprawki błędów
- Naprawiono błąd, który powodował awarię aplikacji podczas wykonywania zadań z użyciem parametru
JobScheduler
w trakcie tworzenia kopii zapasowej b/135858602.
Wersja 2.1.0-beta02
20 czerwca 2019 r.
androidx.work:work-*:2.1.0-beta02
został zwolniony. Zmiany zawarte w tej wersji znajdziesz tutaj.
Poprawki błędów
TestListenableWorkerBuilder
używa teraz prawidłowej wartościWorkerFactory
podczas tworzenia instancjiListenableWorker
. b/135275844- Naprawiono błąd powodujący przesunięcia okien wykonania
WorkRequest
z powodu zakończenia działania procesu. b/135272196
Wersja 2.1.0-beta01
13 czerwca 2019 r.
androidx.work:work-*:2.1.0-beta01
został zwolniony. Zmiany zawarte w tej wersji znajdziesz tutaj.
Poprawki błędów
- WorkManager zależy teraz od
Room 2.1.0
, co powinno rozwiązać niektóre problemy z bazą danych. - Usunięto niektóre operacje wejścia/wyjścia na dysku podczas uruchamiania w wątku głównym.
- Rozwiązano potencjalny impas w śledzeniu ograniczeń. b/134361006
- Anulowanie nieprawidłowych zadań przypisanych do WorkManagera. b/134058261
- Dodano kilka wywołań interfejsów JobScheduler API w celu ochrony przed nieprawidłowym działaniem urządzeń.
Wersja 2.1.0-alpha03
5 czerwca 2019 r.
androidx.work:*:2.1.0-alpha03
został zwolniony.
Poprawki błędów
- Ulepszona dokumentacja
PeriodicWorkRequest
. WorkManagerTestInitHelper
używa teraz odpowiedniego wykonawcy w tle do testów.- Rozwiązania problemów z SQLite podczas obsługi dużych transakcji na niektórych urządzeniach. (b/130182503)
- Zależność WorkManagera jest teraz bardziej szczegółowa. (b/133169148).
- obejście błędów związanych z implementacją
JobScheduler
w przypadku OEM-ów podczas planowania zadań za pomocą WorkManagera. - Ulepszenia w harmonogramie opartym na AlarmManager dotyczące czasu działania usługi, który wcześniej powodował rzadkie awarie. (b/133313734)
Wersja 2.1.0-alpha02
16 maja 2019 r.
Opublikowano WorkManager 2.1.0-alpha02. Ta wersja zawiera kilka nowych interfejsów API.
Zmiany w interfejsie API
PeriodicWorkRequest
obsługuje teraz początkowe opóźnienia. Aby ustawić początkowe opóźnienie, możesz użyć metodysetInitialDelay
w funkcjiPeriodicWorkRequest.Builder
. b/111404867Dodano możliwość delegowania uprawnień do co najmniej 1 zarejestrowanego
WorkerFactory
za pomocąDelegatingWorkerFactory
. b/131435993Dodano możliwość dostosowywania
Executor
używanego przez WorkManager do wszystkich swoich wewnętrznych działań księgowych za pomocąConfiguration.Builder.setTaskExecutor
.Ulepszona dokumentacja dotycząca
WorkRequest.keepResultsForAtLeast
(b/130638001), inicjalizacji na żądanie iPeriodicWorkRequest.Builder
(b/131711394).
Wersja 2.1.0-alpha01
24 kwietnia 2019 r.
Opublikowano WorkManager 2.1.0-alpha01. Ta wersja zawiera kilka nowych interfejsów API. Pamiętaj, że od tej wersji wprowadzimy nowe funkcje, które nie będą dostępne w wersji 1.x. Zalecamy przejście na wersję 2.x.
Zmiany w interfejsie API
- Dodano inicjowanie WorkManagera na żądanie, które tworzy WorkManagera tylko wtedy, gdy jest używany. b/127497100 Aby skonfigurować projekt na potrzeby inicjalizacji na żądanie:
- Wyłącz automatyczny inicjalizator.
- Zaimplementuj
Configuration.Provider
w obiekcie niestandardowymApplication
. - Zmień wszystkie odwołania do
WorkManager.getInstance()
naWorkManager.getInstance(Context)
. W ramach tej zmiany wycofujemyWorkManager.getInstance()
. Zawsze bezpieczniej jest wywołać nową funkcjęWorkManager.getInstance(Context)
, nawet jeśli nie wykonujesz inicjalizacji na żądanie.
- Dodano możliwość tworzenia testów jednostkowych klas
Worker
iListenableWorker
za pomocą artefaktuwork-testing
z elementamiTestWorkerBuilder
iTestListenableWorkerBuilder
.- 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 to maksymalnego rozmiaru obiektówData
. - Wycofano:
CoroutineWorker.coroutineContext
. To pole zostało błędnie zapisane jakoCoroutineDispatcher
; nie powinno być już potrzebne, ponieważ w ciele funkcji zawieszającej możesz samodzielnie przejść do żądanego coroutineContext. - Funkcje
RxWorker.createWork()
iRxWorker.getBackgroundScheduler()
są teraz opatrzone adnotacjami z typami zwracanych danych@NonNull
.
Wersja 2.0.1
Wersja 2.0.1
9 kwietnia 2019 r.
Opublikowaliśmy WorkManager 2.0.1. Ta wersja jest identyczna z wersją 2.0.1-rc01.
Wersja 2.0.1-rc01
3 kwietnia 2019 r.
Opublikowano WorkManager 2.0.1-rc01. Ta wersja zawiera poprawki błędów. W przypadku użytkowników starszych wersji (1.x) niektóre z tych zmian są również dostępne w wersji 1.0.1-rc01.
Poprawki błędów
- Testy Robolectric działają teraz prawidłowo z WorkManagerem. b/122553577
- Naprawiono błąd awarii w przypadku szczególnych przypadków, gdy ograniczenia nie były usuwane w interfejsach JobScheduler z uprzednich wersji. b/129226383
- Naprawiono błąd
StackOverflowError
dotyczący długich łańcuchów zadań. b/129091233 - Zaktualizowano dokumentację dotyczącą
PeriodicWorkRequest
, aby wskazać, że czas elastyczny nie jest obsługiwany w interfejsie API 23. - Naprawiono niedziałające linki w dokumentacji Kotlina.
Wersja 2.0.0
Wersja 2.0.0
20 marca 2019 r.
Opublikowano WorkManager 2.0.0. Ta wersja jest identyczna z 2.0.0-rc01 i jest stabilną wersją AndroidX 1.0.0 z zależnościami AndroidX. Zalecamy kierowanie na tę wersję zamiast na starsze wersje 1.x. Wszystkie aktywne prace rozwojowe będą dotyczyć wersji 2.x, a wersja 1.x przez ograniczony czas będzie otrzymywać tylko poprawki krytycznych błędów.
Wersja 2.0.0-rc01
7 marca 2019 r.
Opublikowano WorkManager 2.0.0-rc01. Ta wersja jest identyczna z 1.0.0, ale zawiera zależności AndroidX. Gdy wersja 2.0.0 będzie stabilna, uwzględnij ją, a starsze wersje 1.x będą otrzymywać tylko niektóre ważne poprawki błędów. Wszystkie aktywne prace rozwojowe będą dotyczyć wersji 2.x.
Zależności sprzed AndroidX
Dokumenty referencyjne: Java
Groovy
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.
Opublikowaliśmy WorkManager 1.0.1. Ta wersja jest identyczna z 1.0.1-rc01.
Zdecydowanie zachęcamy użytkowników do przejścia na wersję WorkManager 2.x, ponieważ w przyszłości będzie bardzo mało aktualizacji gałęzi 1.x. Nowe interfejsy API nie będą też dostępne w bibliotece 1.x.
Wersja 1.0.1-rc01
2 kwietnia 2019 r.
Opublikowano WorkManager 1.0.1-rc01. Ta wersja zawiera poprawki błędów.
Poprawki błędów
- Testy Robolectric działają teraz prawidłowo z WorkManagerem. b/122553577
- Naprawiono błąd awarii w przypadku szczególnych sytuacji, gdy ograniczenia nie były usuwane w interfejsach JobScheduler API. b/129226383
- Naprawiono błąd
StackOverflowError
dotyczący długich łańcuchów zadań. b/129091233
Wersja 1.0.0
Wersja 1.0.0
5 marca 2019 r.
Jest to stabilna wersja WorkManager 1.0.0. Ta wersja WorkManager jest identyczna z 1.0.0-rc02.
Wersja 1.0.0-rc02
21 lutego 2019 r.
To druga wersja kandydata do publikacji stabilnej wersji 1.0.0 WorkManagera. Ta wersja zawiera 2 poprawki błędów.
Poprawki błędów
Worker
s są teraz prawidłowo zaplanowane po awarii aplikacji. b/124546316Worker
s, które rzucają niezaznaczoneException
, są teraz prawidłowo oznaczone jakoFAILED
i nie powodują już awarii procesu aplikacji.
Wersja 1.0.0-rc01
14 lutego 2019 r.
To wersja kandydująca do publikacji stabilnej wersji 1.0.0 WorkManagera. Ta wersja zawiera 1 poprawkę błędu.
Poprawki błędów
- Implementacja oparta na AlarmManager poprawnie uwzględnia okna
flex
w przypadku PeriodicWorkRequests. b/124274584
Wersja 1.0.0-beta05
6 lutego 2019 r.
Ta wersja zawiera kilka poprawek błędów.
Poprawki błędów
- Rozwiązano problem, który występował, gdy w interfejsie API 23 używano funkcji
JobScheduler.getPendingJob(...)
. b/123893059 - Rozwiązaliśmy problem z funkcją
NullPointerException
na urządzeniach z Androidem 5.1 (poziom interfejsu API 22) lub starszym. b/123835104
Wersja 1.0.0-beta04
4 lutego 2019 r.
Ta wersja zawiera kilka poprawek błędów.
Poprawki błędów
- Ulepszono harmonogramowanie okresowego działania dla implementacji opartej na AlarmManager.
- Rozwiązaliśmy problem polegający na tym, że WorkManager nieprawidłowo śledził ograniczenia przy użyciu implementacji opartej na AlarmManager. b/123379508
- Rozwiązano problem, który powodował, że WorkManager nie mógł ponownie uruchomić pracy po zakończeniu działania procesu przy użyciu implementacji opartej na AlarmManager. b/123329850
- Rozwiązaliśmy problem, który powodował wyciek Wakelocków przez WorkManagera podczas korzystania z implementacji opartej na AlarmManagerze.
Wersja 1.0.0-beta03
25 stycznia 2019 r.
Ta wersja zawiera kilka poprawek błędów.
Poprawki błędów
- Wprowadziliśmy regresję
1.0.0-beta02
, która w niektórych sytuacjach powodowała nieprawidłowe wykonywanie pracy. b/123211993 - Rozwiązanie problemu polegającego na tym, że zadanie nie respektowało prawidłowo czasu odroczenia. b/122881597
- Naprawiono błąd
ConcurrentModificationException
na urządzeniach z Androidem w wersji 5.1 (interfejs API 20) lub starszej. Jest to kontynuacja poprawki z1.0.0-beta02
. b/121345393 - Dodaliśmy
exported=false
do niektórych komponentów w pliku manifestu, które nie zawierały tej adnotacji. - Dodanie do dokumentacji na poziomie pakietu informacji o tym, jak WorkManager współdziała z systemem operacyjnym.
Wersja 1.0.0-beta02
15 stycznia 2019 r.
Ta wersja zawiera kilka poprawek błędów.
Poprawki błędów
- Rozwiązano problem, który powodował, że zadania okresowe mogły być wykonywane więcej niż raz w interwale na urządzeniach z Androidem 6.0 (poziom interfejsu API 23).b/121998363
- Naprawiono błąd
ConcurrentModificationException
na urządzeniach z Androidem 5.1 (poziom interfejsu API 22) lub starszym. b/121345393 - Rozwiązano problem z błędnym wykonywaniem pracy, gdy nie są spełnione ograniczenia na urządzeniach z Androidem 5.1 (poziom interfejsu API 22) lub starszym. b/122578012
- Zoptymalizowano obsługę ukończenia pracy, aby była szybsza w niektórych przypadkach szczególnych.b/122358129
- Wprowadziliśmy zmianę, która ma na celu rozwiązanie potencjalnych warunków wyścigu między wieloma instancjami
LiveData
używanymi przez WorkManager. - Zamiast
1.1.1-rc01
używamy teraz zależnościRoom
1.1.1
, ponieważ obie wersje są identyczne. b/122578011
Wersja 1.0.0-beta01
19 grudnia 2018 r.
Ta wersja nie zawiera żadnych zmian interfejsu API. W przyszłości interfejs WorkManager powinien być stabilny do czasu wydania kolejnej wersji, chyba że pojawi się krytyczny problem. Ta wersja zawiera kilka poprawek błędów.
Poprawki błędów
- Wcześniej anulowane zadania podrzędne do zakończonego zadania nadrzędnego nie będą już wykonywane. b/120811767
- prawidłowo zainicjowane klasy rejestrowania (głównie w ramach testów);
Wersja 1.0.0-alpha13
12 grudnia 2018 r.
Ta wersja zawiera niewielką zmianę interfejsu API, która będzie przydatna dla niektórych użytkowników Kotlina.
Zmiany w interfejsie API
- Klasa
androidx.work.Result
została przeniesiona do klasy wewnętrznejListenableWorker
. Zapobiega to konfliktom refaktoryzacji z klasąResult
najwyższego poziomu w Kotlinie. To jest zmiana interfejsu API, która powoduje przerwanie działania. b/120564418
Zmiany w interfejsie API, które powodują przerwanie zgodności
- Klasa
androidx.work.Result
została przeniesiona do klasy wewnętrznejListenableWorker
.
Wersja 1.0.0-alpha12
5 grudnia 2018 r.
Ta wersja zawiera zmiany w interfejsie API powodujące niezgodność. Zapoznaj się z sekcją Zmiany w interfejsie API powodujące niezgodność. Ta wersja prawdopodobnie zostanie wydana jako pierwsza wersja beta. alpha12
zawiera również obszerne aktualizacje dokumentacji.
Zmiany w interfejsie API
- Nowy artefakt
work-rxjava2
zawieraRxWorker
. To jestListenableWorker
, który oczekujeSingle<Payload>
. - Obsługa interfejsu Firebase JobDispatcher została usunięta z powodu zbliżającego się wycofania. Oznacza to, że artefakt
work-firebase
nie będzie już aktualizowany, ponieważ przechodzimy do wersji beta. W przyszłości rozważymy dodanie alternatywy. - Scalono
Payload
zResult
.Result
to teraz „klasa zamknięta” z 3 konkretnymi implementacjami, które możesz uzyskać za pomocąResult.success()
(lubResult.success(Data)
),Result.failure()
(lubResult.failure(Data)
) iResult.retry()
. TwojeListenableFuture
to terazResult
zamiastPayload
.Worker
nie mają metod get i set dla danych wyjściowychData
. To jest zmiana powodująca niezgodność. - Dodano
Constraints.Builder.setTriggerContentMaxDelay(long, TimeUnit)
iConstraints.Builder.setTriggerContentUpdateDelay(long, TimeUnit)
oraz ich warianty, aby lepiej obsługiwać URI treści z powolnym uruchamianiem. b/119919774 - Dodano wariant
WorkRequest.Builder.setBackoffCriteria(BackoffPolicy, Duration)
. Ta metoda wymaga interfejsu API 26. - Dodano metody rozszerzeń Kotlina
Operation.await()
iListenableFuture.await()
. - Nazwa
Operation.getException()
została zmieniona naOperation.getThrowable()
. To jest zmiana powodująca niezgodność. - Klasa
ContentUriTriggers
i metody, które się do niej odwołują, nie są już dostępne publicznie. To jest zmiana powodująca niezgodność. - Aby uprościć interfejs API, usunięto pozostałe metody varargs w metodach
WorkManager
,WorkContinuation
iOneTimeWorkRequest
. Aby rozwiązać problemy z kompilacją, możesz otoczyć istniejące argumenty varargs za pomocąArrays.asList(...)
. Nadal uwzględniamy wersje każdej metody z jednym argumentem. To jest zmiana powodująca niezgodność. - Usunięto warianty
WorkContinuation.combine(OneTimeWorkRequest, *)
. Prezentowany interfejs API był trudny do zrozumienia. Istniejące metodycombine
są bardziej zrozumiałe. To jest zmiana powodująca niezgodność.
Poprawki błędów
- Implementacje z wersji wcześniejszej niż Android 8.0 Marshmallow są teraz bardziej niezawodne w przywracaniu procesu po awarii zadania, które jest już wykonywane.
LiveData
obserwowany przezobserveForever
jest śledzony przez WorkManager. Jest to wersja wsteczna poprawki biblioteki Room. b/74477406- Funkcja
Data.Builder.build()
wyrzuca teraz wyjątek, jeśli serializowany obiekt przekracza maksymalny rozmiar. Wcześniej zdarzało się to tylko w wątku w tle, gdzie nie można było tego odpowiednio obsłużyć. - Dalsze rozróżnianie zadań zatrzymanych i anulowanych;
getWorkInfoById()
zwróciWorkInfo
zCANCELLED
State
podczasListenableWorker.onStopped()
. - Traktuj
null
Result
jako błędy wListenableWorker
. b/120362353 - Przypuszczalna poprawka dla Shield Tablets z interfejsem API 24, która czasami powodowała błąd
IllegalArgumentException
. b/119484416
Zmiany w interfejsie API, które powodują przerwanie zgodności
- Obsługa interfejsu Firebase JobDispatcher została usunięta z powodu zbliżającego się wycofania. Oznacza to, że artefakt
work-firebase
nie będzie już aktualizowany, ponieważ przechodzimy do wersji beta. W przyszłości rozważymy dodanie alternatywy. - Scalono pole
Payload
z polemResult
.Result
jest teraz „zamkniętą klasą” z 3 konkretnymi implementacjami, które możesz uzyskać za pomocąResult.success()
(lubResult.success(Data)
),Result.failure()
(lubResult.failure(Data)
) iResult.retry()
. TwojeListenableFuture
to terazResult
zamiastPayload
.Worker
nie mają metod get i set dla danych wyjściowychData
. - Dodano metody rozszerzeń Kotlina
Operation.await()
iListenableFuture.await()
. - Nazwa
Operation.getException()
została zmieniona naOperation.getThrowable()
. - Klasa
ContentUriTriggers
i metody, które się do niej odwołują, nie są już dostępne publicznie. - Aby uprościć interfejs API, usunięto pozostałe metody varargs w interfejsach
WorkManager
,WorkContinuation
iOneTimeWorkRequest
. Aby rozwiązać problemy z kompilacją, możesz owinąć istniejące argumenty varargs za pomocą funkcjiArrays.asList(...)
. Nadal uwzględniamy wersje każdej metody z jednym argumentem. - Usunięto warianty
WorkContinuation.combine(OneTimeWorkRequest, *)
. Prezentowany interfejs API był trudny do zrozumienia. Istniejące metodycombine
są bardziej zrozumiałe.
Wersja 1.0.0-alpha11
8 listopada 2018 r.
Ta wersja zawiera wiele zmian, które staną się stabilnym interfejsem API w wersji beta
.
W tej wersji wprowadzono zmiany w interfejsie API, które powodują niezgodność. Zapoznaj się z sekcją Zmiany w interfejsie API powodujące niezgodność.
Zmiany w interfejsie API
work-runtime-ktx
wprowadza nowąCoroutineWorker
.- Nazwa
WorkStatus
została zmieniona naWorkInfo
. Wszystkie odpowiadające im warianty metodygetStatus
zostały przemianowane na odpowiadające im wariantygetWorkInfo
. To jest zmiana powodująca niezgodność. ListenableWorker.onStopped()
no longer accepts ma argument logiczny, który wskazuje, czyWorkRequest
zostało anulowane.WorkManager
nie rozróżnia już tych dwóch typów. To jest zmiana powodująca niezgodność.- Nazwa pakietu
androidx.work.test
została zmieniona naandroidx.work.testing
. To jest zmiana powodująca niezgodność. - Metody ustawiające w interfejsie
Constraints
nie są już częścią publicznego interfejsu API. To jest zmiana powodująca niezgodność. - tablice
WorkerParameters.getTriggeredContentUris()
iWorkerParameters.getTriggeredContentAuthorities()
zwrócone wcześniej. Teraz te metody zwracają kolekcje. To jest zmiana powodująca niezgodność. - Nazwa
ListenableWorker.onStartWork()
została zmieniona naListenableWorker.startWork()
. To jest zmiana powodująca niezgodność. - Konstruktor klasy
WorkStatus
nie jest już częścią publicznego interfejsu API. To jest zmiana powodująca niezgodność. - Jednostki organizacyjne
Configuration.getMaxJobSchedulerID()
iConfiguration.getMinJobSchedulerID()
zostały odpowiednio przemianowane naConfiguration.getMinJobSchedulerId()
iConfiguration.getMaxJobSchedulerId()
. To jest zmiana powodująca niezgodność. - Dodano wiele adnotacji
@NonNull
do publicznego interfejsu API, aby poprawić jego ergonomię. - Dodaj interfejs API
WorkManager.enqueueUniqueWork()
, aby kolejkować unikalneOneTimeWorkRequest
bez konieczności tworzeniaWorkContinuation
. - Wszystkie odmiany metod
enqueue
icancel
w funkcjiWorkManager
zwracają teraz nowy typOperation
. To jest zmiana powodująca niezgodność. - Wszystkie warianty funkcji
enqueue
nie obsługują już argumentów zmiennych w przypadku argumentuWorkRequest
. To jest zmiana powodująca niezgodność. Zamiast tego użyj kolekcji. Możesz użyćArrays.asList()
, aby zmodyfikować istniejący kod. Zrobiliśmy to, aby zmniejszyć liczbę interfejsów API i metod. - Próba
initialize
WorkManager
więcej niż raz na proces spowoduje błądIllegalStateException
. To jest zmiana powodująca niezgodność.
Poprawki błędów
WorkRequest.Builder
w artefakciework-runtime-ktx
korzystają teraz zListenableWorker
. Poprawki b/117666259- Upewnij się, że następny czas uruchomienia
PeriodicWork
jest w przyszłości. Poprawki b/118204399 - Usuń potencjalne operacje wejścia/wyjścia na dysk podczas uruchamiania aplikacji za pomocą WorkManagera. Poprawki b/117796731
- Napraw błędny stan wyścigu w pliku
WorkConstraintsTracker
. Rozwiązano problem android-workmanager/issues/56
Zmiany w interfejsie API, które powodują przerwanie zgodności
- Nazwa
WorkStatus
została zmieniona naWorkInfo
. Wszystkie odpowiadające im warianty metodygetStatus
zostały przemianowane na odpowiadające im wariantygetWorkInfo
. ListenableWorker.onStopped()
no longer accepts ma argument logiczny, który wskazuje, czyWorkRequest
zostało anulowane.WorkManager
nie rozróżnia już tych dwóch typów.- pakiet
androidx.work.test
został przemianowany na pakietandroidx.work.testing
, - Metody ustawiające w interfejsie
Constraints
nie są już częścią publicznego interfejsu API. - tablice
WorkerParameters.getTriggeredContentUris()
iWorkerParameters.getTriggeredContentAuthorities()
zwracane wcześniej. Teraz te metody zwracają kolekcje. - Nazwa
ListenableWorker.onStartWork()
została zmieniona naListenableWorker.startWork()
. - Konstruktor klasy
WorkStatus
nie jest już częścią publicznego interfejsu API. - Jednostki organizacyjne
Configuration.getMaxJobSchedulerID()
iConfiguration.getMinJobSchedulerID()
zostały odpowiednio przemianowane naConfiguration.getMinJobSchedulerId()
iConfiguration.getMaxJobSchedulerId()
. - Wszystkie warianty metod
enqueue
icancel
w funkcjiWorkManager
zwracają teraz nowy typOperation
. - Wszystkie warianty funkcji
enqueue
nie obsługują już argumentów zmiennych w przypadku argumentuWorkRequest
. - Próba
initialize
WorkManager
więcej niż raz na proces spowoduje błądIllegalStateException
.
Wersja 1.0.0-alpha10
11 października 2018 r.
Ta wersja obsługuje pracę asynchroniczną kontrolowaną przez dewelopera. W tej wersji wprowadzono zmiany w interfejsie API, które powodują niezgodność. Zapoznaj się z sekcją Zmiany w interfejsie API powodujące niezgodność.
Spodziewamy się, że WorkManager wchodzi w ostatnią fazę okresu alfa. Spodziewamy się, że interfejs API będzie stabilny w wersji beta, więc poświęć chwilę na przesłanie opinii w naszym narzędziu do śledzenia problemów.
Zmiany w interfejsie API
- Usunięto wszystkie metody i klasy
deprecated
, w tym domyślny konstruktorWorker
. Jest to zmiana interfejsu API, która powoduje przerwanie działania. - Zmieniliśmy nazwę zajęć
NonBlockingWorker
naListenableWorker
. Są one teraz widoczne i gotowe do użycia.ListenableWorker
zapewnia dostęp do jednej abstrakcyjnej metodyListenableFuture<Payload> onStartWork()
, która jest wywoływana w wątku głównym. Rozpoczynanie i przetwarzanie pracy w trybie asynchronicznym zależy od Ciebie. Po zakończeniu należy odpowiednio zaktualizowaćListenableFuture
. Referencyjne implementacjeListenableFuture
są dostępne w pakiecieFutures
w gałęzialpha02
(patrz sekcjaWorkManager
).Worker
rozszerza klasęListenableWorker
i nadal działa tak samo jak wcześniej, z abstrakcyjną metodąResult doWork()
.- Niektóre metody i członków z grupy
Worker
zostały przeniesione do grupyListenableWorker
. - Wkrótce udostępnimy implementacje referencyjne
ListenableWorker
, które korzystają z korobocznych funkcji w Kotlinie (po wydaniu stabilnych wersji) i z RxJava2.
- Interfejs
WorkerFactory
i konkretna implementacjaDefaultWorkerFactory
zostały scalone w abstrakcyjną klasę o nazwieWorkerFactory
. Dzięki temu w przypadku dowolnej instancjiWorkerFactory
utworzonej przez użytkownika wywoływane jest domyślne zachowanie oparte na odbiciu jako ostateczne rozwiązanie. To jest zmiana powodująca niezgodność. - Usunięto
WorkManager.synchronous()
iWorkContinuation.synchronous()
oraz wszystkie powiązane metody. Dodano typ zwracanyListenableFuture<Void>
dla wielu metod w interfejsie API. Ta zmiana w interfejsie API powoduje przerwanie działania.- Teraz możesz synchronicznie pobierać i obserwować dane za pomocą funkcji
ListenableFuture
. Na przykład funkcjaWorkManager.enqueue()
zwracała wcześniejvoid
, a teraz zwracaListenableFuture<Void>
. Po zakończeniu operacji możesz wywołać funkcjęListenableFuture.addListener(Runnable, Executor)
lubListenableFuture.get()
, aby uruchomić kod. - Pamiętaj, że te wartości
ListenableFuture
nie informują, czy operacja zakończyła się sukcesem, czy niepowodzeniem, tylko że została zakończona. Aby uzyskać te informacje, nadal musisz połączyć metody WorkManagera. - Ignorujemy wywołania
cancel()
dotyczące tych obiektów, ponieważ są one mylące i trudne do zrozumienia (czy anulujesz operację, czy wynikającą z niej pracę?). To jest zgodne z umowąFuture
. - Aby zachować zgodność z metodami synchronicznymi
getStatus*
, udostępniliśmy wariantyListenableFuture
i zmieniliśmy nazwy dotychczasowych metod, które zwracałyLiveData
, tak aby zawierały w swojej nazwie „LiveData” (np.getStatusesByIdLiveData(UUID)
). Jest to zmiana interfejsu API, która powoduje przerwanie działania.
- Teraz możesz synchronicznie pobierać i obserwować dane za pomocą funkcji
Poprawki błędów
- Rozwiązaliśmy znany problem z wersji alpha09 dotyczący duplikatów plików
androidx-annotations.pro
. Możesz usunąć obejście z poprzednich informacji o wersji, usuwającexclude 'META-INF/proguard/androidx-annotations.pro'
z pliku gradle. - Dodano konfiguracje Proguard, aby zachować nową instrukcję konstruktora
Worker
. b/116296569 - Naprawiono potencjalny błąd
NullPointerException
w warunkach wyścigu, gdyREPLACE
została wykonana praca. b/116253486 i b/116677275 - Funkcja
WorkContinuation.combine()
akceptuje teraz co najmniej 1WorkContinuation
zamiast 2 lub więcej. b/117266752
Zmiany w interfejsie API, które powodują przerwanie zgodności
- Usunięto wszystkie metody i klasy
deprecated
, w tym domyślny konstruktorWorker
. - Interfejs
WorkerFactory
i konkretna implementacjaDefaultWorkerFactory
zostały scalone w abstrakcyjną klasę o nazwieWorkerFactory
. - Usunięto
WorkManager.synchronous()
iWorkContinuation.synchronous()
. - Metody
WorkManager.getStatus*()
zwracają terazListenableFuture
.WorkManager.getStatus*LiveData()
zwrotLiveData
.
Wersja 1.0.0-alpha09
19 września 2018 r.
Znany problem
Jeśli napotkasz ten problem: „Znaleziono więcej niż 1 plik z ścieżką niezależną od systemu operacyjnego 'META-INF/proguard/androidx-annotations.pro'”, dodaj do pliku gradle następujący kod, który będzie tymczasowym obejściem problemu, do czasu aż naprawimy go w wersji alpha10:
Groovy
android { packagingOptions { exclude 'META-INF/proguard/androidx-annotations.pro' } }
Kotlin
android { packagingOptions { exclude("META-INF/proguard/androidx-annotations.pro") } }
Poprawki błędów
- Dodano kolejną poprawkę, która była potrzebna do rozwiązania problemu „100 zadań”. b/115560696
- Dodaliśmy kilka poprawek błędów ograniczeń klucza obcego spowodowanych warunkami wyścigu. b/114705286
- Przekazane wywołania
ConstraintTrackingWorker.onStopped(boolean)
do podstawowej funkcjiWorker
. b/114125093 - Wymuś prawidłowe minimalne opóźnienie w przypadku Firebase JobDispatcher. b/113304626
- Ulepszone wątkowanie zapewnia wewnętrzne gwarancje biblioteki.
- Poprawiono potencjalny problem z usuwaniem duplikatów
LiveData
wewnętrznie.
Zmiany w interfejsie API
- Teraz możesz tworzyć własne instancje
Worker
w czasie wykonywania, podając parametrWorkerFactory
w ramach parametruWorkManager.Configuration
. Fabryka zastępcza toDefaultWorkerFactory
, która odpowiada działaniu poprzednich wersji WorkManagera.- Domyślne konstruktory
Worker
iNonBlockingWorker
są teraz oznaczone jako wycofane. Użyj nowego konstruktora (Worker(Context, WorkerParameters)
) i wywołaj metodęsuper(Context, WorkerParameters)
. W przyszłych wersjach WorkManager konstruktor domyślny zostanie usunięty.
- Domyślne konstruktory
- Wewnętrznie zaczęliśmy używać nowego artefaktu
ListenableFuture
(bez zależności od Guavy). W kolejnych wersjach wprowadzimy do interfejsu API interfejs ListenableFuture. Ta zmiana umożliwi odsłonięcieNonBlockingWorker
. - Dodano możliwość uruchamiania pracy z limitem czasu w
TestDriver
za pomocą funkcjiTestDriver.setInitialDelayMet(UUID)
iTestDriver.setPeriodDelayMet(UUID)
. b/113360060
Zmiany powodujące niezgodność
- Domyślne konstruktory
Worker
iNonBlockingWorker
są wycofane. Jak najszybciej przejdź na nowego konstruktora. W przyszłych wersjach konstruktor domyślny zostanie usunięty.
Wersja 1.0.0-alpha08
27 sierpnia 2018 r.
Poprawki błędów
- wyraźnie oznaczyć komponenty WorkManager jako nieobsługujące bezpośredniego uruchamiania, aby nie uruchamiały się podczas bezpośredniego uruchamiania; W przyszłości udostępnimy wersję WorkManagera, która obsługuje bezpośrednie uruchamianie. b/112665532
- Rozwiązaliśmy problem, który powodował, że nie wykonywano powtórzonych zadań. b/112604021
- Rozwiązanie problemu polegającego na tym, że zadania okresowe nie były wykonywane wielokrotnie (związany z powyższym problemem). b/112859683
- Stosowanie zasad wycofywania, gdy proces aplikacji jest już uruchomiony.
- Poprawiono komunikaty o wyjątkach w pliku
Data
, aby wskazywały, że limit to 10 KB. - Zmniejszono maksymalną wartość
Configuration.setMaxSchedulerLimit(int)
do 50, aby uwzględnić pewien czas oczekiwania na zakończenie przetwarzaniaJobScheduler
. b/112817355
Wersja 1.0.0-alpha07
16 sierpnia 2018 r.
Poprawki błędów
- Naprawiono potencjalne zapytanie SQL z ujemnymi limitami, które mogło zwrócić nieograniczoną liczbę wyników.
- Zadania, które zostały już wykonane, teraz prawidłowo anulują wszystkie oczekujące kopie tego zadania w innych harmonogramach. Spowoduje to przekroczenie limitu
JobScheduler
zadań. b/111569265 - Naprawiono błąd
ConcurrentModificationException
w plikuConstraintTracker
. b/112272753 - Zmieniono adnotacje typu zwracanego w funkcjach
Data.getBooleanArray(String)
iData.getIntArray(String)
na@Nullable
zamiast@NonNull
. b/112275229
Zmiany w interfejsie API
Worker
rozszerza teraz nową klasęNonBlockingWorker
. Nie ma to wpływu na bieżące korzystanie z usługi. W przyszłościNonBlockingWorker
stanie się w pełni obsługiwanym elementem w przypadku niestandardowych rozwiązań dotyczących wątków.- Zmieniono adnotacje typu zwracanego w funkcjach
Data.getBooleanArray(String)
iData.getIntArray(String)
na@Nullable
zamiast@NonNull
. b/112275229 - Rozszerzenia Kotlina: wycofane
Map.toWorkData()
i dodano interfejsworkDataOf(vararg Pair<String, Any?>)
najwyższego poziomu, aby zachować spójność z dotychczasowymi interfejsami API.
Wersja 1.0.0-alpha06
1 sierpnia 2018 r.
Poprawki błędów
- Zapobieganie blokowaniu bazy danych podczas planowania pracy. b/111801342
- Naprawiono błąd, który powodował, że
PeriodicWork
nie działał zgodnie z harmonogramem w trybie Doze. b/111469837 - Naprawiono warunek wyścigu podczas śledzenia ograniczeń, który powodował awarię
WorkManager
. googlecodelabs/android-workmanager/issues/56 - Utwórz unikalne
WorkRequest
, gdy używaszWorkRequest.Builder#build()
. b/111408337 - Włączanie korzystania z funkcji
RescheduleReceiver
tylko wtedy, gdy sąWorkRequest
, które jej potrzebują. b/111765853
Wersja 1.0.0-alpha05
24 lipca 2018 r.
Zmiany w interfejsie API
- Urządzenie
WorkManager.getInstance()
jest teraz oznaczone jako@NonNull
zamiast@Nullable
. Jeśli jednak w przypadku inicjalizacji ręcznej singleton nie zostanie prawidłowo zainicjowany, metoda zwróci błądIllegalStateException
. Jest to zmiana interfejsu API, która może spowodować przerwanie działania aplikacji. - Dodaliśmy nowy interfejs API
Configuration.Builder.setMinimumLoggingLevel(int)
, który umożliwia kontrolowanie szczegółowości WorkManagera. Domyślnie WorkManager rejestrujeLog.INFO
i nowsze. - Zmieniono sygnaturę parametru
Data.getString()
, aby nie przyjmował już wartości domyślnej (jest on domyślnie ustawiony nanull
). Jest to zmiana interfejsu API, która powoduje przerwanie działania. - Oznaczyliśmy niektóre metody potrzebne tylko do użytku wewnętrznego jako
@hide
. Obejmuje to konstruktorConstraints
, metodyData.toByteArray()
iData.fromByteArray(byte[])
. Ta zmiana w interfejsie API powoduje przerwanie działania.
Poprawki błędów
- WorkManager nie wykonuje już zadań w znanych przypadkach automatycznego tworzenia kopii zapasowych. Może to spowodować awarię. b/110564377
- Rozwiązaliśmy problem z podwójnym planowaniem
PeriodicWorkRequest
podczas używaniaJobScheduler
. b/110798652 - Rozwiązaliśmy problem polegający na tym, że
PeriodicWorkRequest
nie działały prawidłowo po przejściu urządzenia w stan uśpienia. b/111469837 - Rozwiązaliśmy problem z opóźnieniami początkowymi podczas używania Firebase JobDispatcher. b/111141023
- Naprawiono niektóre potencjalne problemy z warunkami wyścigu i czasami.
- Prawidłowo zwolniono
BroadcastReceiver
, których już nie potrzebowano. - Zoptymalizowano wydajność przy ponownym planowaniu, gdy aplikacje są uruchamiane ponownie po wymuszeniu ich zamknięcia.
- Funkcja
TestScheduler.setAllConstraintsMet(UUID)
może być wywoływana przed lub po umieszczeniu danego elementuWorkRequest
w kolejce. b/111238024
Zmiany w wersji beta
- Urządzenie
WorkManager.getInstance()
jest teraz oznaczone jako@NonNull
zamiast@Nullable
. - Zmieniono sygnaturę atrybutu
Data.getString()
, aby nie przyjmował on już wartości domyślnej (jest to domyślnienull
). - Oznaczyliśmy niektóre metody potrzebne tylko do użytku wewnętrznego jako
@hide
. Obejmuje to konstruktorConstraints
, metodyData.toByteArray()
iData.fromByteArray(byte[])
.
Wersja 1.0.0-alpha04
26 czerwca 2018 r.
Poprawki błędów
- W przypadku korzystania z implementacji opartej na
AlarmManager
PeriodicWorkRequest
są teraz poprawnie przeplanowywane. - Rozwiązano potencjalny błąd ANR podczas ponownego planowania wszystkich instancji roboczych po wymuszonym zatrzymaniu lub ponownym uruchomieniu. b/110507716
- Dodano adnotacje dotyczące możliwości wystąpienia wartości null do różnych interfejsów WorkManager API. b/110344065
- Rejestrowanie nieprzechwyconych wyjątków, które występują podczas wykonywania zadania. b/109900862
- Umożliwiono destruktywne migracje bazy danych na wypadek, gdybyś zdecydował(-a) się cofnąć do starszej wersji WorkManagera. b/74633270
- Rozwiązaliśmy problem z błędem migracji, który występował podczas tworzenia zduplikowanych tagów domyślnych. Jest to bardzo rzadki problem, który występuje tylko wtedy, gdy użyjesz tego samego formatu tagu domyślnego.
Wersja 1.0.0-alpha03
19 czerwca 2018 r.
Poprawki błędów
Usunięto warunek wyścigu w implementacji opartej na
AlarmManager
(b/80346526).Rozwiązaliśmy problem z duplikatami zadań podczas używania funkcji
JobScheduler
po ponownym uruchomieniu urządzenia.Zadania z wyzwalaczami identyfikatorów URI treści są teraz zachowywane po ponownym uruchomieniu. b/80234744
Aktualizacje dokumentacji. b/109827628, b/109758949, b/80230748
Naprawiono awarię podczas ponownego umieszczania w kolejce
WorkRequest
. b/109572353.Naprawiono ostrzeżenia kompilatora Kotlina podczas używania zależności
work-runtime-ktx
.WorkManager używa teraz wersji
Room
1.1.1-rc1
.
Zmiany w interfejsie API
- Dodano
getStatusesSync()
, czyli wersję synchroniczną funkcjiWorkContinuation.getStatuses()
. Worker
może odróżnić anulowanie przez użytkownika od tymczasowego zatrzymania na żądanie systemu operacyjnego.Worker.isStopped()
zwracatrue
, jeśli został przesłany dowolny rodzaj zapytania o zatrzymanie.Worker.isCancelled()
zwracatrue
, gdy zadanie zostało wyraźnie anulowane. b/79632247- Dodano obsługę metody JobParameters#getNetwork() w wersji interfejsu API 28. Jest ona dostępna za pomocą
Worker.getNetwork()
. - Dodano
Configuration.Builder.setMaxSchedulerLimit(int maxSchedulerLimit)
, aby można było określić maksymalną liczbę zadań, które mogą być wysyłane doJobScheduler
lubAlarmManager
. Dzięki temuWorkManager
nie zajmie wszystkich dostępnychJobScheduler
miejsc. - Dodano
Configuration.setJobSchedulerJobIdRange(int minJobSchedulerId, int maxJobSchedulerId)
, który pomaga zdefiniować zakres identyfikatorów zadańJobScheduler
, które są bezpieczne do użycia przezWorkManager
. b/79996760 Worker.getRunAttemptCount()
zwraca bieżącą liczbę uruchomień danegoWorker
. b/79716516WorkManager.enqueueUniquePeriodicWork(String uniqueWorkName, ExistingPeriodicWorkPolicy existingPeriodicWorkPolicy, PeriodicWorkRequest periodicWork)
umożliwia umieszczanie w kolejce unikalnychPeriodicWorkRequest
. b/79600647WorkManager.cancelAllWork()
anuluje wszystkieWorker
. Biblioteki zależne odWorkManager
mogą sprawdzać, kiedy ta metoda została wywołana po raz ostatni, używając do tego celuWorkManager.getLastCancelAllTimeMillis()
w celu dodatkowego wyczyszczania stanu wewnętrznego.- Dodano
WorkManager.pruneWork()
, aby usuwać ukończone zadania z wewnętrznej bazy danych. b/79950952, b/109710758
Zmiany w zachowaniu
- Dodano domyślny tag dla wszystkich elementów
WorkRequest
, który jest pełną nazwą klasy dla elementuWorker
. Dzięki temu możesz usuwaćWorkRequest
beztag
lub gdyid
jest niedostępna. b/109572351
Zmiany w wersji beta
- Nazwa
Worker.WorkerResult
została zmieniona naWorker.Result
. - Element
Worker.onStopped
ma teraz dodatkowy parametrisCancelled
, który jest ustawiony natrue
, gdy elementWorker
został wyraźnie anulowany.
Wersja 1.0.0-alpha02
24 maja 2018 r.
Poprawki błędów
- Naprawiono błąd
NullPointerException
w witrynieState.isFinished()
. b/79550068 - Rozwiązaliśmy problem, który powodował przeplanowanie
Worker
naApplication.onCreate()
. b/79660657 - Rozwiązaliśmy problem, który umożliwiał zaplanowanie większej ilości pracy niż dozwolone przez system operacyjny. b/79497378
- Przeniesienie czyszczenia blokad uśpienia powiązanych z
Worker
do wątku w tle. - Implementacja
AlarmManager
teraz prawidłowo usuwa dane, gdy wszystkie oczekujące zadania zostaną ukończone. - Naprawiono zapytania SQL do czyszczenia, które wpływały na lokalizację w języku innym niż angielski. b/80065360
- Dodaliśmy obsługę właściwości
float
w składnikuData
. b/79443878 - Funkcja
Data.Builder.putAll()
zwraca teraz wystąpienie elementuBuilder
. b/79699162 - Więcej informacji w dokumentacji i poprawki w niej. b/79691663
Zmiany w interfejsie API
Worker
mogą reagować na zatrzymanie. Za pomocąWorker.isStopped()
możesz sprawdzić, czyWorker
została zatrzymana.Worker.onStopped()
można używać do wykonywania prostych operacji czyszczenia.- Interfejs API
Worker.getTags()
zwracaSet
tagów powiązanych zWorker
. - Dodano przeciążenia
javax.time.Duration
dla interfejsów API, które przyjmują kombinację czasu trwania iTimeUnit
. Jest on chroniony przez@RequiresApi(26)
. WorkManager
rozszerzeń zostało przeniesionych z pakietuandroidx.work.ktx
do pakietuandroidx.work
. Stare rozszerzenia zostały wycofane i w przyszłej wersji zostaną usunięte.- Środowisko wykonawcze
Configuration.withExecutor()
zostało wycofane. Zamiast tego użyj polaConfiguration.setExecutor()
.
Wersja 1.0.0-alpha01
8 maja 2018 r.
WorkManager upraszcza planowanie i wykonywanie gwarantowanego działania w tle z uwzględnieniem ograniczeń. Ta pierwsza wersja to 1.0.0-alpha01
.