نوفر إمكانية التشغيل التفاعلي بين 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()
، سيتم التخلص من الاشتراك، لذلك
لست بحاجة إلى التعامل مع توقفات العمل بأي طريقة خاصة.