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.

Trwałe zadania mogą być wykonywane natychmiast, przez długi czas lub mogą być odroczone.
Ilustracja 1. Typy trwałych działań.

Poniżej znajdziesz tabelę z różnymi typami pracy.

Typ Okresowości Jak uzyskać dostęp
Natychmiast jednorazowy OneTimeWorkRequestWorker.

Aby przyspieszyć pracę, zadzwoń do setExpedited() w ramach swojego zgłoszenia OneTimeWorkRequest.

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. PeriodicWorkRequestWorker.

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ęCoroutinesRxJava 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, GcmNetworkManagerJob 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

Blogi