אנחנו מספקים יכולת פעולה הדדית בין 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()
, המינוי יימחק, כך אין צורך לטפל בחסימות בעבודה בשום צורה.