0Pricing
Android Academy · Lekcja

Tworzenie Worker

Zdefiniuj pracę w tle w Worker

Tworzenie Worker to bezpłatna lekcja Android Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Android Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Android Academy zawiera 4 lekcji w sumie.

Tworzenie elementu Worker

Jednostką pracy wykonywanej w tle w WorkManager jest Worker. Definiuje Pan/Pani zadanie, dziedzicząc po klasie bazowej workera i przesłaniając jego metodę work.

CoroutineWorker

W języku Kotlin należy rozszerzyć klasę CoroutineWorker. Jej metoda doWork() jest funkcją suspend, dlatego można naturalnie wywoływać inne funkcje suspend i uruchamiać kod na dispatcherze działającym w tle.

class UploadWorker(
    context: Context,
    params: WorkerParameters
) : CoroutineWorker(context, params) {
    override suspend fun doWork(): Result {
        // background work here
        return Result.success()
    }
}

Konstruktor

Każdy worker przyjmuje w konstruktorze Context i WorkerParameters, a następnie przekazuje je do nadklasy. WorkManager tworzy instancję workera za Pana/Panią — nigdy nie wywołuje się konstruktora bezpośrednio.

doWork zwraca wynik

doWork() musi zwracać obiekt Result opisujący rezultat. Istnieją trzy możliwości.

  • Result.success()
  • Result.retry()
  • Result.failure()

Result.success

Należy zwrócić Result.success(), gdy praca została ukończona. Praca zostanie usunięta z kolejki. Można dołączyć dane wyjściowe, aby przekazać je do pracy połączonej w łańcuch.

override suspend fun doWork(): Result {
    uploadLogs()
    return Result.success()
}

Result.retry

Należy zwrócić Result.retry() w przypadku przejściowego błędu, takiego jak tymczasowy błąd sieci. WorkManager uruchomi workera ponownie później, zgodnie z zasadą opóźnień kolejnych prób.

override suspend fun doWork(): Result {
    return try {
        syncData()
        Result.success()
    } catch (e: IOException) {
        Result.retry()
    }
}

Result.failure

Należy zwrócić Result.failure() w przypadku trwałego błędu, którego ponowienie nie naprawi, na przykład nieprawidłowych danych wejściowych. Praca zostanie zatrzymana, a zależne prace połączone w łańcuch nie zostaną uruchomione.

Odczytywanie danych wejściowych

Małe dane wejściowe przekazuje się za pomocą Data podczas umieszczania pracy w kolejce, a wewnątrz workera odczytuje się je za pomocą inputData. Dane powinny być niewielkie — ten mechanizm nie służy do dużych ładunków danych.

override suspend fun doWork(): Result {
    val userId = inputData.getString("user_id") ?: return Result.failure()
    sync(userId)
    return Result.success()
}

Zwracanie danych wyjściowych

Workery mogą zwracać w swoim wyniku obiekt Data, który workery połączone w łańcuch otrzymają jako dane wejściowe. W ten sposób przekazuje się wyniki między kolejnymi etapami.

val output = workDataOf("count" to 42)
return Result.success(output)

Praca na właściwym dispatcherze

CoroutineWorker domyślnie uruchamia doWork() na Dispatchers.Default. W przypadku blokujących operacji wejścia-wyjścia należy przełączyć się za pomocą withContext(Dispatchers.IO), aby nie wyczerpać puli domyślnej.

override suspend fun doWork(): Result = withContext(Dispatchers.IO) {
    readAndUploadFile()
    Result.success()
}

Workery powinny być samowystarczalne

Worker może zostać uruchomiony długo po zaplanowaniu, w nowym procesie. Nie należy polegać na stanie aplikacji przechowywanym w pamięci; potrzebne dane trzeba przekazać za pomocą danych wejściowych albo odczytać z trwałego magazynu.

Szybkie sprawdzenie

Sprawdź swoją wiedzę na temat tworzenia elementu Worker.

Podsumowanie

Utworzył(a) Pan/Pani element Worker:

  • Rozszerzono CoroutineWorker i przesłonięto funkcję suspend doWork()
  • Zwracano Result.success(), Result.retry() lub Result.failure()
  • Odczytywano inputData i zwracano wyjściowe dane Data
  • Używano Dispatchers.IO do pracy blokującej; workery pozostawały samowystarczalne

Dalej: ograniczenia i planowanie.

Często zadawane pytania

Czy lekcja „Tworzenie Worker” jest bezpłatna?

Tak — pełny tekst „Tworzenie Worker” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Android Academy, przejdź na CoddyKit PRO. Kurs Android Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Tworzenie Worker”?

Zdefiniuj pracę w tle w Worker Ćwiczysz Android Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Android Academy?

Nie wymagamy żadnego doświadczenia. Android Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.

Ile czasu zajmuje lekcja „Tworzenie Worker”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Android Academy?

Tak. Każda lekcja Android Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Kiedy używać WorkManager
  2. Tworzenie Worker
  3. Ograniczenia i harmonogramowanie
  4. Praca okresowa i łańcuchowa
← Powrót do Android Academy