Planuj zadania za pomocą WorkManagera stanowi część Androida Jetpack.

WorkManager jest zalecanym rozwiązaniem w przypadku ciągłej pracy. Praca jest trwała, gdy pozostaje zaplanowana – są to ponowne uruchomienia aplikacji i systemu. Większość przetwarzania w tle najlepiej wykonywać przez stałą pracę, dlatego WorkManager jest podstawowym zalecanym interfejsem API do przetwarzania w tle.

Rodzaje pracy trwałej

WorkManager wykonuje 3 rodzaje trwałej pracy:

  • Natychmiastowe: zadania, które muszą rozpocząć się natychmiast i wkrótce. Może zostać przyspieszony.
  • Długo działające: zadania, które mogą działać dłużej, potencjalnie dłużej niż 10 minut.
  • Odroczone: zaplanowane zadania, które rozpoczynają się później i mogą być uruchamiane okresowo.

Rysunek 1 przedstawia, jak różne rodzaje trwałej pracy łączą się ze sobą.

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

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

Typ Okresowość Jak uzyskać dostęp
Natychmiast Jednorazowe OneTimeWorkRequest i Worker.

Aby przyspieszyć pracę, zadzwoń pod numer setExpedited() w żądaniu OneTimeWorkRequest.

Długo biegające Jednorazowo lub okresowo Dowolne WorkRequest lub Worker. Wywołaj setForeground() w instancji roboczej, aby obsłużyć powiadomienie.
Odroczone Jednorazowo lub okresowo PeriodicWorkRequest i Worker.

Więcej informacji o konfigurowaniu WorkManagera znajdziesz w przewodniku na temat definiowania żądań WorkRequests.

Funkcje

Poza prostszym i spójniejszym interfejsem API WorkManager ma wiele innych kluczowych korzyści:

Ograniczenia w pracy

Określ deklaratywnie optymalne warunki pracy przy użyciu ograniczeń pracy. Na przykład urządzenie powinno działać tylko wtedy, gdy jest w sieci bez pomiaru użycia danych, jest bezczynne lub gdy bateria jest wystarczająco naładowana.

Rozbudowane harmonogramy

WorkManager umożliwia planowanie pracy jednorazowo lub wielokrotnie przy użyciu elastycznych okien planowania. Można też oznaczać zadania tagami i nadawać im nazwy, co pozwala zaplanować unikalną, zastępczą pracę oraz monitorować lub anulować grupy pracy.

Zaplanowana praca jest przechowywana w wewnętrznie zarządzanej bazie danych SQLite, a WorkManager dba o to, aby ta praca była utrzymywana i planowana po każdym ponownym uruchomieniu urządzenia.

WorkManager działa też zgodnie z funkcjami oszczędzania energii i sprawdzonymi metodami, takimi jak tryb uśpienia, więc nie musisz się tym przejmować.

Praca przyspieszona

Za pomocą WorkManagera możesz zaplanować natychmiastowe wykonanie zadania w tle. Używaj opcji Ekspresowa praca w przypadku zadań, które są ważne dla użytkownika i które są wykonywane w ciągu kilku minut.

Elastyczne zasady ponownych prób

Czasem praca się nie kończy. WorkManager udostępnia elastyczne zasady ponawiania, w tym konfigurowalną zasadę wykładniczego ponawiania.

Łańcuch pracy

W przypadku złożonych zadań połącz poszczególne zadania w łańcuch, korzystając z intuicyjnego interfejsu, który pozwala kontrolować, które elementy są uruchamiane sekwencyjnie, a które równoległe.

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 na potrzeby danego zadania. W przypadku łańcuchów WorkManager automatycznie przekazuje dane wyjściowe od jednego zadania do następnego.

Wbudowana interoperacyjność wątków

WorkManager płynnie integruje się z Coroutines i RxJava oraz zapewnia elastyczność podłączania własnych asynchronicznych interfejsów API.

Korzystanie z WorkManagera do niezawodnej pracy

WorkManager służy do pracy, która jest wymagana do niezawodnego działania nawet wtedy, gdy użytkownik opuści ekran, aplikacja opuści aplikację lub uruchomi się ponownie. Przykład:

  • Wysyłanie logów lub analiz do usług backendu.
  • Okresowe synchronizowanie danych aplikacji z serwerem.

Usługa WorkManager nie jest przeznaczona do pracy w tle, którą można bezpiecznie zakończyć, jeśli ten proces aplikacji zostanie wyłączony. Nie jest to również ogólne rozwiązanie do wszystkich zadań, które wymagają natychmiastowego wykonania. Zapoznaj się z przewodnikiem po przetwarzaniu w tle, aby sprawdzić, które rozwiązanie odpowiada Twoim potrzebom.

Związek z innymi interfejsami API

Chociaż współprogramy są zalecane w określonych przypadkach użycia, nie należy ich używać do ciągłej pracy. Warto zauważyć, że współprace to platforma równoczesności, a WorkManager to biblioteka do trwałej pracy. Analogicznie należy używać aplikacji AlarmManager tylko w przypadku zegarów lub kalendarzy.

Interfejs API Zalecane dla: Relacja z platformą WorkManager
Korutyny Cała praca asynchroniczna, która nie musi być trwała. Korutyny to standardowy sposób opuszczenia głównego wątku w Kotlin. Jednak po zamknięciu aplikacji opuszczają one pamięć. Do stałej pracy używaj aplikacji WorkManager.
AlarmManager Tylko alarmy. W przeciwieństwie do WorkManagera AlarmManager wybudza urządzenie z trybu uśpienia. W związku z tym nie jest tak wydajny w zakresie zarządzania energią i zasobami. Używaj jej tylko w przypadku alarmów i powiadomień, takich jak wydarzenia w kalendarzu – nie działa w tle.

Zastępowanie wycofanych interfejsów API

Interfejs WorkManager API jest zalecanym zamiennikiem wszystkich poprzednich interfejsów API do planowania w tle na Androidzie, w tym FirebaseJobDispatcher, GcmNetworkManager i Job Scheduler.

Wprowadzenie

Informacje o korzystaniu z WorkManagera w aplikacji znajdziesz w przewodniku dla początkujących.

Dodatkowe materiały

Więcej informacji na temat WorkManager znajdziesz w tych materiałach.

Próbki

Filmy

Blogi