我们在 WorkManager 与 RxJava 之间提供互操作性。如需开始使用这种互操作性,除了在您的 gradle 文件中包含 work-runtime 之外,还应包含 work-rxjava3 依赖项。而且还有一个支持 rxjava2 的 work-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() 时,系统会处理订阅,因此您无需以任何特殊方式处理停工情况。