ما قابلیت همکاری بین WorkManager و RxJava را فراهم می کنیم. برای شروع، وابستگی work-rxjava3
را علاوه بر work-runtime
در فایل gradle خود قرار دهید. همچنین یک وابستگی work-rxjava2
وجود دارد که به جای آن از rxjava2 پشتیبانی می کند.
سپس، به جای گسترش Worker
، باید RxWorker
گسترش دهید. در نهایت متد RxWorker.createWork()
را نادیده بگیرید تا Single<Result>
که Result
اجرای شما را نشان می دهد، به صورت زیر برگردانید:
کاتلین
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() } } }
جاوا
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()
باشد، اشتراک از بین میرود، بنابراین نیازی نیست به روش خاصی با توقفهای کاری کار کنید.