我們提供 WorkManager 和 RxJava 之間的互通性。如要開始使用,請在 Gradle 檔案中加入 work-runtime
以外的 work-rxjava3
依附元件。也有支援 rxjava2 的 work-rxjava2
依附元件。
然而,不是擴充 Worker
,應該擴充 RxWorker
。最後,覆寫 RxWorker.createWork()
方法,以回傳表示執行作業 Result
的 Single<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()
時,訂閱將會取消,因此您不需要以任何特殊方式處理作業停止。