Threading di RxWorker

Kami menyediakan interoperabilitas antara WorkManager dan RxJava. Untuk memulai, sertakan dependensi work-rxjava3 selain work-runtime pada file gradle Anda. Ada juga dependensi work-rxjava2 yang justru mendukung rxjava2.

Kemudian, perluas RxWorker, bukan Worker. Terakhir, ganti metode RxWorker.createWork() agar menampilkan Single<Result> yang menunjukkan Result eksekusi Anda, seperti berikut:

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() };
    }
}

Perlu diperhatikan bahwa RxWorker.createWork() dipanggil pada thread utama, tetapi nilai yang ditampilkan secara default adalah berlangganan pada thread latar belakang. Anda dapat mengganti RxWorker.getBackgroundScheduler() untuk mengubah thread berlangganan.

Jika RxWorker bernilai onStopped(), langganan akan dibuang, sehingga Anda tidak perlu menangani penghentian pekerjaan dengan cara khusus apa pun.