RxWorker এ থ্রেডিং

আমরা WorkManager এবং RxJava এর মধ্যে ইন্টারঅপারেবিলিটি প্রদান করি। শুরু করতে, আপনার গ্রেডল ফাইলে work-runtime ছাড়াও work-rxjava3 নির্ভরতা অন্তর্ভুক্ত করুন। এছাড়াও একটি 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() হয়, তখন সাবস্ক্রিপশনটি নিষ্পত্তি হয়ে যাবে, তাই আপনাকে কোনো বিশেষ উপায়ে কাজের স্টপেজগুলি পরিচালনা করতে হবে না।