Потоки в RxWorker

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 extend RxWorker . Finally override the RxWorker.createWork() method to return a Single<Result> indicating the Result of your execution, as follows:

Котлин

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() }     } }

Ява

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.