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

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