Потоки в 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.