سلسلة المحادثات في RxWorker

نوفر إمكانية التشغيل التفاعلي بين WorkManager وRxJava. عليك أولاً ضمِّن تبعية work-rxjava3 بالإضافة إلى work-runtime في ملف Gradle. هناك أيضًا تبعية 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()، سيتم التخلص من الاشتراك، لذلك لست بحاجة إلى التعامل مع توقفات العمل بأي طريقة خاصة.