RxWorker में थ्रेडिंग

हम WorkManager और RxJava के बीच इंटरऑपरेबिलिटी (दूसरे सिस्टम के साथ काम करना) की सुविधा देते हैं. शुरू करने के लिए, अपनी Gradle फ़ाइल में 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() }
    }
}

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() को मुख्य थ्रेड में कॉल किया गया है, लेकिन रिटर्न यह मान डिफ़ॉल्ट रूप से बैकग्राउंड थ्रेड पर सदस्यता लिया गया होता है. आप RxWorker.getBackgroundScheduler() को बदलकर, सदस्यता लेने से जुड़ा थ्रेड.

RxWorker के onStopped() होने पर, सदस्यता रद्द हो जाएगी. इसलिए आपको किसी खास तरीके से काम के रुकने की समस्या को हल करने की ज़रूरत नहीं है.