RxWorker'da mesaj dizisi

WorkManager ve RxJava arasında birlikte çalışabilirlik sağlıyoruz. Başlangıç olarak gradle dosyanıza work-runtime ek olarak work-rxjava3 bağımlılığını ekleyin. Bunun yerine rxjava2'yi destekleyen bir work-rxjava2 bağımlılığı da vardır.

Sonra, Worker uzatılır yerine RxWorker uzatılmalıdır. Son RxWorker.createWork() ayarını geçersiz kıl yöntemini kullandığınızda, yürütmenizin Result değerini belirten bir Single<Result> değeri şöyle olur:

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() öğesinin ana iş parçacığında çağrıldığını, ancak dönüşünün değeri varsayılan olarak bir arka plan ileti dizisinde abonedir. Değiştirmek için RxWorker.getBackgroundScheduler() değerini geçersiz kılabilirsiniz. abone olma.

onStopped() olan RxWorker, abonelikten çıkarılır. Bu nedenle iş duraklamalarını özel bir şekilde ele almanız gerekmez.