Planowanie zadań za pomocą WorkManagera Część Androida Jetpack.
WorkManager to zalecane rozwiązanie do wykonywania trwałych zadań. Zadanie jest trwałe, gdy pozostaje zaplanowane po ponownym uruchomieniu aplikacji i systemu. Większość procesów w tle najlepiej realizować za pomocą trwałych zadań, dlatego WorkManager jest podstawowym zalecanym interfejsem API do przetwarzania w tle.
Rodzaje trwałych prac
WorkManager obsługuje 3 typy trwałych zadań:
- Natychmiastowe: zadania, które muszą się rozpocząć natychmiast i wkrótce się zakończyć. Można je przyspieszyć.
- Długotrwałe: zadania, które mogą trwać dłużej, potencjalnie ponad 10 minut.
- Odroczone: zaplanowane zadania, które rozpoczynają się w późniejszym czasie i mogą być wykonywane okresowo.
Na rysunku 1 przedstawiono, jak różne typy trwałej pracy są ze sobą powiązane.
W tabeli poniżej przedstawiamy różne rodzaje pracy.
Typ | Okresowość | Jak uzyskać dostęp |
---|---|---|
Natychmiast | jednorazowy | OneTimeWorkRequest i Worker .
W przypadku pilnych prac zadzwoń pod numer |
Długotrwałe | Jednorazowe lub okresowe | Dowolny z tych elementów: WorkRequest lub Worker . Wywołaj funkcję setForeground() w procesie roboczym, aby obsłużyć powiadomienie.
|
Możliwe do odroczenia | Jednorazowe lub okresowe | PeriodicWorkRequest i Worker .
|
Więcej informacji o konfigurowaniu WorkManagera znajdziesz w przewodniku Defining your WorkRequests (Definiowanie WorkRequest).
Funkcje
Oprócz prostszego i bardziej spójnego interfejsu API usługa WorkManager ma też szereg innych zalet:
Ograniczenia dotyczące pracy
Deklaratywnie zdefiniuj optymalne warunki uruchamiania pracy za pomocą ograniczeń pracy. Na przykład uruchamiaj tylko wtedy, gdy urządzenie jest połączone z siecią bez limitu danych, gdy jest nieaktywne lub gdy bateria jest wystarczająco naładowana.
Solidne planowanie
WorkManager umożliwia planowanie zadań, które mają być wykonywane jednorazowo lub wielokrotnie w elastycznych przedziałach czasu. Prace można też oznaczać tagami i nadawać im nazwy, co pozwala planować unikalne, wymienne prace oraz monitorować lub anulować grupy prac.
Zaplanowane zadania są przechowywane w zarządzanej wewnętrznie bazie danych SQLite, a WorkManager dba o to, aby te zadania były trwałe i ponownie planowane po ponownym uruchomieniu urządzenia.
WorkManager jest też zgodny z funkcjami oszczędzania energii i sprawdzonymi metodami, takimi jak tryb uśpienia, więc nie musisz się o to martwić.
Prace priorytetowe
Za pomocą WorkManagera możesz zaplanować natychmiastowe wykonanie pracy w tle. W przypadku zadań, które są ważne dla użytkownika i które są wykonywane w ciągu kilku minut, używaj przyspieszonego przetwarzania.
Elastyczna zasada ponawiania
Czasami praca się nie udaje. WorkManager oferuje elastyczne zasady ponawiania, w tym konfigurowalne zasady wykładniczego wycofywania.
Łączenie zadań
W przypadku złożonych powiązanych zadań łącz poszczególne zadania za pomocą intuicyjnego interfejsu, który umożliwia kontrolowanie, które elementy są wykonywane sekwencyjnie, a które równolegle.
Kotlin
val continuation = WorkManager.getInstance(context) .beginUniqueWork( Constants.IMAGE_MANIPULATION_WORK_NAME, ExistingWorkPolicy.REPLACE, OneTimeWorkRequest.from(CleanupWorker::class.java) ).then(OneTimeWorkRequest.from(WaterColorFilterWorker::class.java)) .then(OneTimeWorkRequest.from(GrayScaleFilterWorker::class.java)) .then(OneTimeWorkRequest.from(BlurEffectFilterWorker::class.java)) .then( if (save) { workRequest<SaveImageToGalleryWorker>(tag = Constants.TAG_OUTPUT) } else /* upload */ { workRequest<UploadWorker>(tag = Constants.TAG_OUTPUT) } )
Java
WorkManager.getInstance(...) .beginWith(Arrays.asList(workA, workB)) .then(workC) .enqueue();
W przypadku każdego zadania możesz określić dane wejściowe i wyjściowe. Podczas łączenia zadań WorkManager automatycznie przekazuje dane wyjściowe z jednego zadania do następnego.
Wbudowana interoperacyjność wątków
WorkManager bezproblemowo integruje się z korutynami i RxJava oraz zapewnia elastyczność, która pozwala podłączać własne interfejsy API do operacji asynchronicznych.
Używanie WorkManagera do niezawodnej pracy
Biblioteka WorkManager jest przeznaczona do zadań, które muszą być wykonywane niezawodnie, nawet jeśli użytkownik opuści ekran, aplikacja zostanie zamknięta lub urządzenie zostanie ponownie uruchomione. Przykład:
- wysyłanie dzienników lub danych analitycznych do usług backendu;
- okresowe synchronizowanie danych aplikacji z serwerem;
WorkManager nie jest przeznaczony do pracy w tle w ramach procesu, którą można bezpiecznie zakończyć, jeśli proces aplikacji zostanie przerwany. Nie jest to też ogólne rozwiązanie w przypadku wszystkich zadań, które wymagają natychmiastowego wykonania. Zapoznaj się z przewodnikiem po przetwarzaniu w tle, aby sprawdzić, które rozwiązanie spełnia Twoje potrzeby.
Związek z innymi interfejsami API
Chociaż w niektórych przypadkach użycia zalecamy korzystanie z korutyn, nie należy ich używać do wykonywania trwałych zadań. Warto pamiętać, że coroutines to platforma współbieżności, a WorkManager to biblioteka do wykonywania trwałych zadań. Podobnie narzędzia AlarmManager należy używać tylko w przypadku zegarów i kalendarzy.
Interfejs API | Polecane: | Związek z WorkManagerem |
---|---|---|
Korutyny | Wszystkie zadania asynchroniczne, które nie muszą być trwałe. | Korutyny to standardowy sposób opuszczania wątku głównego w Kotlinie. Po zamknięciu aplikacji znikają one jednak z pamięci. Do wykonywania zadań, które mają być wykonywane w sposób ciągły, używaj WorkManagera. |
AlarmManager | Tylko alarmy. | W przeciwieństwie do WorkManagera AlarmManager wybudza urządzenie z trybu uśpienia. Nie jest więc efektywny pod względem zarządzania energią i zasobami. Używaj go tylko w przypadku dokładnych alarmów lub powiadomień, takich jak wydarzenia w kalendarzu, a nie do pracy w tle. |
Zastępowanie wycofanych interfejsów API
Interfejs WorkManager API jest zalecanym zamiennikiem poprzednich interfejsów API Androida do planowania zadań w tle, w tym FirebaseJobDispatcher
i GcmNetworkManager
.
Pierwsze kroki
Zapoznaj się z przewodnikiem dla początkujących, aby zacząć korzystać z WorkManagera w swojej aplikacji.
Dodatkowe materiały
Więcej informacji o WorkManager
znajdziesz w tych materiałach:
Próbki
Filmy
- Workmanager - MAD Skills, seria filmów
- Praca z WorkManagerem – prezentacja z Android Dev Summit 2018
- WorkManager: Beyond the basics (WorkManager: wykraczanie poza podstawy) z Android Dev Summit 2019
Blogi
Polecane dla Ciebie
- Uwaga: tekst linku jest wyświetlany, gdy JavaScript jest wyłączony.
- Uruchomienie aplikacji