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