Threading در RxWorker

ما قابلیت همکاری بین WorkManager و RxJava را فراهم می کنیم. برای شروع، وابستگی work-rxjava3 را علاوه بر work-runtime در فایل gradle خود قرار دهید. همچنین یک وابستگی work-rxjava2 وجود دارد که به جای آن از rxjava2 پشتیبانی می کند.

سپس، به جای گسترش Worker ، باید RxWorker گسترش دهید. در نهایت متد RxWorker.createWork() را نادیده بگیرید تا Single<Result> که Result اجرای شما را نشان می دهد، به صورت زیر برگردانید:

کاتلین

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

جاوا

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() باشد، اشتراک از بین می‌رود، بنابراین نیازی نیست به روش خاصی با توقف‌های کاری کار کنید.