RxWorker 中的執行緒

我們提供 WorkManager 和 RxJava 之間的互通性。如要開始使用,請在 Gradle 檔案中加入 work-runtime 以外的 work-rxjava3 依附元件。也有支援 rxjava2 的 work-rxjava2 依附元件。

然而,不是擴充 Worker,應該擴充 RxWorker。最後,覆寫 RxWorker.createWork() 方法,以回傳表示執行作業 ResultSingle<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() 時,訂閱將會取消,因此您不需要以任何特殊方式處理作業停止