我们在 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()
来更改订阅线程。
当 RxWorker
被 onStopped()
时,订阅将被取消,因此您无需以任何特殊方式处理 工作停止。