We provide interoperability between WorkManager and RxJava. To get started,
include work-rxjava3 dependency in addition to work-runtime in your gradle file.
There is also a work-rxjava2 dependency that supports rxjava2 instead.
Then, instead of extending Worker, you should extendRxWorker. Finally
override the RxWorker.createWork()
method to return a Single<Result> indicating the Result of your execution, as
follows:
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() }; } }
Note that RxWorker.createWork() is called on the main thread, but the return
value is subscribed on a background thread by default. You can override RxWorker.getBackgroundScheduler() to change the
subscribing thread.
When an RxWorker is onStopped(), the subscription will get disposed of, so
you don't need to handle work stoppages in any special way.