欢迎参加我们将于 6 月 3 日举行的 #Android11:Beta 版发布会

用 RxWorker 处理线程

我们在 WorkManager 与 RxJava2 之间提供互操作性。要开始使用这种互操作性,除了 work-runtime,还应将 work-rxjava2 包含到 gradle 文件中。然后,您应该扩展 RxWorker,而不是扩展 Worker。最后替换 RxWorker.createWork() 方法以返回 Single<Result>,用于表示您的执行的 Result,如下所示:

    public class RxDownloadWorker extends RxWorker {

        public RxDownloadWorker(Context context, WorkerParameters params) {
            super(context, params);
        }

        @Override
        public Single<Result> createWork() {
            return Observable.range(0, 100)
                .flatMap { download("https://www.google.com") }
                .toList()
                .map { Result.success() };
        }
    }
    

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

停止 RxWorker 会妥善处理 Observer,因此您无需以任何特殊方式处理停工