RxWorker-এ থ্রেডিং

আমরা WorkManager ও RxJava-এর মধ্যে ইন্টারঅপারেবিলিটি প্রদান করি। শুরু করতে, আপনার গ্রেডেল ফাইলে work-runtime ছাড়াও work-rxjava3 ডিপেন্ডেন্সি অন্তর্ভুক্ত করুন। এছাড়াও, একটি work-rxjava2 ডিপেন্ডেন্সি আছে যা এর পরিবর্তে rxjava2-কে সাপোর্ট করে।

তারপর, Worker বাড়ানোর পরিবর্তে, আপনার RxWorker বাড়ানো উচিত। অবশেষে, RxWorker.createWork() মেথড ওভাররাইড করে Single<Result> রিটার্ন করুন যা আপনার এক্সিকিউশনের 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() }
    }
}

জাভা

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() হলে, সাবস্ক্রিপশন বাতিল হয়ে যাবে, তাই আপনাকে কোনও বিশেষ উপায়ে কাজ বন্ধ হওয়া ম্যানেজ করতে হবে না।