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.