Zaplanuj zadania za pomocą WorkManagera Należy do Android Jetpack.
WorkManager to zalecane rozwiązanie do pracy trwałej. Praca jest trwała, gdy pozostaje zaplanowana po ponownym uruchomieniu aplikacji i systemu. Większość przetwarzania w tle najlepiej realizować za pomocą pracy trwałej, dlatego WorkManager jest głównym zalecanym interfejsem API do przetwarzania w tle.
Typy trwałych utworów
WorkManager obsługuje 3 typy trwałych zadań:
- Natychmiast: zadania, które muszą się rozpocząć natychmiast i wkrótce się zakończyć. Może zostać przyspieszony.
- Długotrwałe: zadania, które mogą trwać dłużej niż 10 minut.
- Opóźnialne: zaplanowane zadania, które są uruchamiane w późniejszym terminie i mogą być wykonywane okresowo.
Rysunek 1 przedstawia, jak różne typy trwałych zadań są ze sobą powiązane.
Poniżej znajdziesz tabelę z różnymi typami pracy.
Typ | Okresowości | Jak uzyskać dostęp |
---|---|---|
Natychmiast | jednorazowy | OneTimeWorkRequest i Worker .
Aby przyspieszyć pracę, zadzwoń do |
Długotrwałe | jednorazowy lub okresowy. | Dowolne z WorkRequest lub Worker . Aby obsłużyć powiadomienie, wywołaj funkcję setForeground() w Workerze.
|
Odroczone | jednorazowy lub okresowy. | PeriodicWorkRequest i Worker .
|
Więcej informacji o konfigurowaniu WorkManager znajdziesz w przewodniku Definiowanie WorkRequests.
Funkcje
Oprócz prostszego i bardziej spójnego interfejsu WorkManager oferuje też kilka innych kluczowych zalet:
Ograniczenia dotyczące pracy
Za pomocą ograniczeń zadań deklaratywnie definiuj optymalne warunki wykonywania zadań. Na przykład tylko wtedy, gdy urządzenie jest podłączone do nielimitowanej sieci, gdy jest nieaktywne lub gdy ma wystarczającą ilość baterii.
niezawodne planowanie,
WorkManager umożliwia planowanie pracy do wykonania jednorazowo lub wielokrotnie, korzystając z elastycznych okien planowania. Zadania można też oznaczać tagami i nadawać im nazwy, co pozwala na planowanie unikalnych, wymiennych zadań oraz monitorowanie i anulowanie grup zadań.
Zaplanowane zadania są przechowywane w zarządzanej wewnętrznie bazie danych SQLite, a WorkManager dba o to, aby były one zachowane i przeplanowane po ponownym uruchomieniu urządzenia.
Ponadto WorkManager stosuje funkcje oszczędzania energii i sprawdzone metody, takie jak tryb Doze, więc nie musisz się o to martwić.
Praca priorytetowa
Za pomocą WorkManagera możesz zaplanować natychmiastowe wykonanie pracy w tle. Praca przyspieszona powinna być używana do zadań ważnych dla użytkownika, które można wykonać w ciągu kilku minut.
Elastyczna zasada ponownych prób
Czasami praca się nie udaje. WorkManager oferuje elastyczne zasady ponownego próby, w tym konfigurowalną wzrastającą zasadę odpuszczania.
Łańcuch zadań
W przypadku złożonych powiązanych zadań możesz łatwo łączyć poszczególne zadania za pomocą intuicyjnego interfejsu, który pozwala kontrolować, które elementy mają być 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 zdefiniować dane wejściowe i wyjściowe. Gdy łączysz ze sobą zadania, WorkManager automatycznie przekazuje dane wyjściowe z jednego zadania do następnego.
Wbudowana interoperacyjność wątków
WorkManager bezproblemowo integruje się z Coroutines i RxJava oraz zapewnia elastyczność w zakresie podłączania własnych interfejsów API asynchronicznych.
Używanie WorkManagera do niezawodnego działania
WorkManager jest przeznaczony do pracy, która wymaga bezpiecznego działania nawet wtedy, gdy użytkownik opuszcza ekran, zamyka aplikację lub urządzenie jest ponownie uruchamiane. Na przykład:
- Wysyłanie dzienników lub danych analitycznych do usług backendowych.
- okresowo synchronizować dane aplikacji z serwerem.
WorkManager nie jest przeznaczony do przetwarzania w tle, które można bezpiecznie zakończyć, jeśli proces aplikacji zostanie przerwany. Nie jest to też ogólne rozwiązanie dla wszystkich zadań wymagających natychmiastowego wykonania. Zapoznaj się z przewodnikiem po przetwarzaniu w tle, aby dowiedzieć się, które rozwiązanie spełni Twoje potrzeby.
Związek z innymi interfejsami API
Chociaż coroutines to zalecane rozwiązanie w pewnych przypadkach użycia, nie należy ich używać do pracy trwałej. Pamiętaj, że coroutines to framework dotyczący równoległości, a WorkManager to biblioteka do pracy trwałej. Podobnie, należy używać AlarmManager tylko w przypadku zegarów i kalendarzy.
Interfejs API | Polecane dla | Związek z WorkManager |
---|---|---|
Coroutines | Wszystkie zadania asynchroniczne, które nie muszą być trwałe. | Wątek współbieżny to standardowy sposób opuszczania wątku głównego w Kotlinie. Po zamknięciu aplikacji są jednak usuwane z pamięci. W przypadku pracy długotrwałej użyj WorkManagera. |
AlarmManager | tylko alarmy. | W przeciwieństwie do WorkManagera, AlarmManager wybudza urządzenie z trybu Doze. Nie jest więc wydajny pod względem zarządzania energią i zasobami. Używaj go tylko do precyzyjnych 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 zalecaną alternatywą dla wszystkich wcześniejszych interfejsów API do harmonogramowania w tle na Androidzie, w tym FirebaseJobDispatcher, GcmNetworkManager i Job Scheduler.
Pierwsze kroki
Aby zacząć używać WorkManagera w aplikacji, zapoznaj się z przewodnikiem dla początkujących.
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, z Android Dev Summit 2018
- WorkManager: Beyond the basics (WorkManager: więcej niż podstawy), Android Developer Summit 2019
Blogi
Polecane dla Ciebie
- Uwaga: tekst linku jest wyświetlany, gdy obsługa JavaScript jest wyłączona
- Uruchamianie aplikacji