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