Harmonogram zadań

Jeśli chcesz wykonywać zadania, które będą działać nawet wtedy, gdy aplikacja nie będzie widoczna, zalecamy użycie biblioteki Jetpack WorkManager. WorkManager ma solidny mechanizm planowania, który umożliwia utrzymywanie zadań po ponownym uruchomieniu aplikacji i urządzenia.

Rodzaje prac

WorkManager obsługuje 3 typy 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 zadań są ze sobą powiązane.

Praca trwała może być natychmiastowa, długotrwała lub odroczona.
Rysunek 1. Rodzaje pracy.

W tabeli poniżej przedstawiamy różne rodzaje pracy.

Typ Częstotliwość Sposób uzyskiwania dostępu
Natychmiastowe Jednorazowe OneTimeWorkRequestWorker. W przypadku priorytetowych prac wywołaj funkcję setExpedited() z OneTimeWorkRequest.
Długotrwałe Jednorazowe lub okresowe Dowolny z tych elementów: WorkRequest lub Worker. Wywołaj funkcję setForeground() z klasy Worker, aby obsłużyć powiadomienie.
Odroczone Jednorazowe lub okresowe PeriodicWorkRequestWorker.

Więcej informacji o konfigurowaniu biblioteki WorkManager znajdziesz w przewodniku dotyczącym definiowania WorkRequest.

Funkcje biblioteki WorkManager

Oprócz prostszego i bardziej spójnego interfejsu API WorkManager ma też szereg innych zalet:

Ograniczenia związane z pracą

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 pomiaru, 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 zachowywane 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ą biblioteki WorkManager 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 funkcji Prace priorytetowe.

Elastyczna zasada ponawiania

Czasami zadanie nie zostanie wykonane. WorkManager oferuje elastyczne zasady ponawiania, w tym konfigurowalne zasady wzrastającego czasu do ponowienia.

Łą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ę ze współprogramamiRxJava oraz zapewnia elastyczność, która pozwala podłączać własne interfejsy API do operacji asynchronicznych.

Używanie biblioteki WorkManager do niezawodnego wykonywania 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.

Porównanie z innymi interfejsami API

Ta tabela porównuje bibliotekę WorkManager z podobnymi interfejsami API. Te informacje mogą pomóc Ci wybrać interfejs API spełniający wymagania Twojej aplikacji.

Interfejs API Zalecany dla Związek z WorkManagerem
Współprogramy Wszystkie zadania asynchroniczne, które nie muszą być wykonywane, gdy aplikacja przestaje być widoczna. Współprogramy to standardowy sposób opuszczania wątku głównego w Kotlinie. Przestają jednak działać, gdy aplikacja zostanie zamknięta. W przypadku zadań, które powinny być wykonywane nawet po zamknięciu aplikacji, używaj WorkManagera.
AlarmManager Tylko alarmy. W przeciwieństwie do zwykłych klas worker w bibliotece WorkManager alarmy precyzyjne AlarmManager wybudzają urządzenie z trybu uśpienia. Dlatego AlarmManager jest sprawdza się pod względem zarządzania energią i zasobami. Używaj go tylko w przypadku alarmów precyzyjnych lub powiadomień, takich jak wydarzenia w kalendarzu, a nie w przypadku cyklicznych zadań 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 FirebaseJobDispatcherGcmNetworkManager.

Pierwsze kroki

Zapoznaj się z przewodnikiem dla początkujących, aby zacząć korzystać z WorkManagera w swojej aplikacji.

Dodatkowe materiały

W sekcjach poniżej znajdziesz dodatkowe materiały.

Filmy

Blogi

Próbki