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.
Quindi, invece di estendere Worker
, dovresti estendere RxWorker
. Infine, sostituisci il metodo RxWorker.createWork()
per restituire un valore Single<Result>
che indica la Result
dell'esecuzione, come indicato di seguito:
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()
viene chiamato nel thread principale, ma il valore restituito
è subscribed su un thread in background per impostazione predefinita. Puoi eseguire l'override di RxWorker.getBackgroundScheduler()
per modificare il thread di sottoscrizione.
Quando un valore di RxWorker
è onStopped()
, l'abbonamento verrà eliminato, quindi non dovrai gestire in alcun modo le interruzioni del lavoro.