Creare un Worker
Definisca il lavoro in background in un Worker.
Creare un Worker è una lezione Android Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Android Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Android Academy include 4 lezioni in totale.
Creazione di un Worker
L’unità di lavoro in background di WorkManager è un Worker. Si definisce l’attività creando una sottoclasse di una classe base worker e sovrascrivendo il relativo metodo di lavoro.
CoroutineWorker
Per Kotlin, si estende CoroutineWorker. Il suo doWork() è una funzione suspend, quindi è possibile chiamare altre funzioni suspend ed eseguire il lavoro naturalmente su un dispatcher in background.
class UploadWorker(
context: Context,
params: WorkerParameters
) : CoroutineWorker(context, params) {
override suspend fun doWork(): Result {
// background work here
return Result.success()
}
}Il costruttore
Ogni worker riceve un Context e WorkerParameters nel costruttore e li passa alla superclasse. È WorkManager a creare un’istanza del worker; non si chiama mai direttamente il costruttore.
doWork restituisce un Result
doWork() deve restituire un Result che descrive l’esito dell’operazione. Le possibilità sono tre.
Result.success()Result.retry()Result.failure()
Result.success
Si restituisce Result.success() quando il lavoro è stato completato. Il lavoro viene rimosso dalla coda. È possibile allegare dati di output da passare al lavoro concatenato.
override suspend fun doWork(): Result {
uploadLogs()
return Result.success()
}Result.retry
Si restituisce Result.retry() in caso di errore temporaneo, ad esempio un problema di rete momentaneo. WorkManager esegue nuovamente il worker in un secondo momento, in base alla relativa strategia di backoff.
override suspend fun doWork(): Result {
return try {
syncData()
Result.success()
} catch (e: IOException) {
Result.retry()
}
}Result.failure
Si restituisce Result.failure() in caso di errore permanente che un nuovo tentativo non può risolvere, ad esempio dati di input non validi. Il lavoro viene interrotto e i lavori concatenati dipendenti non verranno eseguiti.
Lettura dei dati di input
Si passano piccoli dati di input tramite Data quando si accoda il lavoro e li si legge con inputData all’interno del worker. È importante mantenerli di dimensioni ridotte: non sono pensati per payload di grandi dimensioni.
override suspend fun doWork(): Result {
val userId = inputData.getString("user_id") ?: return Result.failure()
sync(userId)
return Result.success()
}Restituzione dei dati di output
I worker possono restituire Data nel risultato, che i worker concatenati ricevono come input. Questo è il modo per passare i risultati da un passaggio a quello successivo.
val output = workDataOf("count" to 42)
return Result.success(output)Esecuzione sul dispatcher corretto
CoroutineWorker esegue doWork() su Dispatchers.Default per impostazione predefinita. Per le operazioni di I/O bloccanti, si esegue lo switch con withContext(Dispatchers.IO) per evitare di saturare il pool predefinito.
override suspend fun doWork(): Result = withContext(Dispatchers.IO) {
readAndUploadFile()
Result.success()
}Mantenere i worker autonomi
Un worker può essere eseguito molto tempo dopo essere stato pianificato, in un processo appena creato. Non si deve fare affidamento sullo stato dell’app in memoria; è necessario passare i dati richiesti tramite i dati di input oppure leggerli dall’archiviazione persistente.
Verifica rapida
Verifichi la Sua comprensione della creazione di un Worker.
Riepilogo
Ha creato un Worker:
- Estenda
CoroutineWorkere sovrascriva il metodo suspenddoWork() - Restituisca
Result.success(),Result.retry()oppureResult.failure() - Legga
inputDatae restituisca i dati di outputData - Utilizzi
Dispatchers.IOper le operazioni bloccanti e mantenga i worker autonomi
Prossimo argomento: vincoli e pianificazione.
Domande Frequenti
La lezione «Creare un Worker» è gratuita?
Sì — il testo completo di «Creare un Worker» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Android Academy, passa a CoddyKit PRO. Il corso Android Academy include 4 lezioni in totale.
Cosa imparerò in «Creare un Worker»?
Definisca il lavoro in background in un Worker. Eserciti Android Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Android Academy?
Non è richiesta alcuna esperienza precedente. Android Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.
Quanto tempo richiede la lezione «Creare un Worker»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Android Academy?
Sì. Ogni lezione Android Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.