RxWorker 中的多线程

我们在 WorkManager 和 RxJava 之间提供互操作性。要开始使用,请在您的 gradle 文件中包含 work-rxjava3 依赖项,以及 work-runtime。此外,还有 work-rxjava2 依赖项,它支持 rxjava2。

然后,您应该扩展 RxWorker,而不是扩展 Worker。最后,重写 RxWorker.createWork() 方法,以返回一个 Single<Result>,指示您的执行的 Result,如下所示

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

请注意,RxWorker.createWork() 是在主线程上调用的,但返回值默认情况下是在后台线程上订阅的。您可以重写 RxWorker.getBackgroundScheduler() 来更改订阅线程。

RxWorkeronStopped() 时,订阅将被取消,因此您无需以任何特殊方式处理 工作停止