Cos’è WorkManager Android Java?

approfondisci su Android Developers. WorkManager Android Java rappresenta innanzitutto la soluzione raccomandata da Google per eseguire task in background su Android. A differenza di AsyncTask (deprecato) o dei semplici Thread, WorkManager garantisce l’esecuzione anche se l’app viene chiusa o il dispositivo riavviato. Inoltre, rispetto a IntentService, WorkManager Android Java offre una gestione più efficiente delle risorse e una maggiore compatibilità con le diverse versioni di Android, grazie alla sua architettura basata su JobScheduler e FirebaseJobDispatcher.
Quando usare WorkManager Android Java
- Innanzitutto, sincronizzazione dati con il server
- Inoltre, upload di file in background
- In particolare, task periodici (es. backup giornaliero)
- Infine, operazioni che devono completarsi anche offline
Aggiungere la dipendenza WorkManager in Android Java
Nel file build.gradle (modulo app) aggiungi:
dependencies {
implementation "androidx.work:work-runtime:2.9.0"
}
Creare un Worker in Java
Il Worker è la classe che contiene il codice da eseguire in background. Innanzitutto, estendi Worker e implementa il metodo doWork(): in questo modo, il metodo viene eseguito automaticamente in un thread in background separato dal thread principale, permettendoti di svolgere operazioni lunghe senza bloccare l’interfaccia utente. WorkManager offre vantaggi significativi rispetto ad approcci manuali come ExecutorService, fornendo una gestione automatica dei vincoli e della persistenza.
import android.content.Context;
import androidx.annotation.NonNull;
import androidx.work.Worker;
import androidx.work.WorkerParameters;
public class MioWorker extends Worker {
public MioWorker(@NonNull Context context, @NonNull WorkerParameters params) {
super(context, params);
}
@NonNull
@Override
public Result doWork() {
// Il tuo codice in background
Log.d("MioWorker", "Task eseguito!");
return Result.success();
}
}
Il metodo doWork() deve restituire, in particolare, uno di questi valori:
Result.success()— innanzitutto, task completato con successoResult.failure()— quindi, task fallitoResult.retry()— infine, riprova più tardi
Eseguire un task con WorkManager in Android Java
Innanzitutto, usa OneTimeWorkRequest per eseguire un task una sola volta:
import androidx.work.OneTimeWorkRequest;
import androidx.work.WorkManager;
OneTimeWorkRequest request = new OneTimeWorkRequest.Builder(MioWorker.class)
.build();
WorkManager.getInstance(this).enqueue(request);
Lavori periodici
Per eseguire un task a intervalli regolari, inoltre, usa PeriodicWorkRequest. In particolare, l’intervallo minimo è 15 minuti:
import androidx.work.PeriodicWorkRequest;
import java.util.concurrent.TimeUnit;
PeriodicWorkRequest periodicRequest = new PeriodicWorkRequest.Builder(
MioWorker.class,
1, TimeUnit.HOURS)
.build();
WorkManager.getInstance(this).enqueue(periodicRequest);
Vincoli di esecuzione
Innanzitutto, puoi aggiungere vincoli per controllare quando il task viene eseguito:
import androidx.work.Constraints;
import androidx.work.NetworkType;
Constraints vincoli = new Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
.setRequiresBatteryNotLow(true)
.setRequiresStorageNotLow(true)
.build();
OneTimeWorkRequest request = new OneTimeWorkRequest.Builder(MioWorker.class)
.setConstraints(vincoli)
.build();
WorkManager.getInstance(this).enqueue(request);
Passare dati al Worker
Innanzitutto, usa Data per passare parametri al Worker:
import androidx.work.Data;
Data inputData = new Data.Builder()
.putString("chiave", "valore")
.putInt("numero", 42)
.build();
OneTimeWorkRequest request = new OneTimeWorkRequest.Builder(MioWorker.class)
.setInputData(inputData)
.build();
WorkManager.getInstance(this).enqueue(request);
Nel Worker, quindi, recuperi i dati con getInputData():
@Override
public Result doWork() {
String valore = getInputData().getString("chiave");
int numero = getInputData().getInt("numero", 0);
Log.d("MioWorker", "Valore: " + valore + ", Numero: " + numero);
return Result.success();
}
Osservare lo stato del lavoro
Puoi monitorare lo stato del task, ad esempio, con LiveData:
UUID workId = request.getId();
WorkManager.getInstance(this)
.getWorkInfoByIdLiveData(workId)
.observe(this, workInfo -> {
if (workInfo != null && workInfo.getState() == WorkInfo.State.SUCCEEDED) {
Log.d("WorkManager", "Task completato!");
}
});
Conclusione su WorkManager Android Java
guida ufficiale Google rappresenta innanzitutto lo strumento più affidabile per i task in background su Android. In questo modo, gestisce automaticamente i vincoli, la persistenza e la compatibilità con le versioni Android precedenti. Di conseguenza, per task semplici usa OneTimeWorkRequest, per quelli ripetuti PeriodicWorkRequest, e sfrutta i vincoli per ottimizzare batteria e rete. Infine, integra WorkManager con soluzioni di persistenza come Room Database per sincronizzare e archiviare i dati localmente. In conclusione, non esitare a integrare WorkManager nei tuoi progetti per migliorare la gestione dei compiti in background e offrire un’esperienza utente più fluida e reattiva.
Rispondi