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
CoroutineWorkeri przesłonięto funkcję suspenddoWork() - Zwracano
Result.success(),Result.retry()lubResult.failure() - Odczytywano
inputDatai zwracano wyjściowe daneData - Używano
Dispatchers.IOdo 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.