Forniamo l'interoperabilità tra WorkManager e RxJava. Per iniziare,
Includi la dipendenza work-rxjava3
oltre a work-runtime
nel file Gradle.
Esiste anche una dipendenza work-rxjava2
che supporta rxjava2.
Poi, invece di estendere Worker
, devi estendere RxWorker
. Infine
sostituisci RxWorker.createWork()
per restituire un valore Single<Result>
che indica Result
dell'esecuzione, come
che segue:
Kotlin
class RxDownloadWorker( context: Context, params: WorkerParameters ) : RxWorker(context, params) { override fun createWork(): Single<Result> { return Observable.range(0, 100) .flatMap { download("https://www.example.com") } .toList() .map { Result.success() } } }
Java
public class RxDownloadWorker extends RxWorker { public RxDownloadWorker(Context context, WorkerParameters params) { super(context, params); } @NonNull @Override public Single<Result> createWork() { return Observable.range(0, 100) .flatMap { download("https://www.example.com") } .toList() .map { Result.success() }; } }
Tieni presente che RxWorker.createWork()
è chiamato nel thread principale, ma viene restituito
è subscribed in un thread in background per impostazione predefinita. Puoi eseguire l'override di RxWorker.getBackgroundScheduler()
per modificare
l'iscrizione al thread.
Quando RxWorker
avrà onStopped()
, l'abbonamento verrà eliminato, quindi
non dovrai gestire le interruzioni di lavoro in nessun modo particolare.