Zapewniamy interoperacyjność między WorkManagerem a RxJava. Na początek
uwzględnij w pliku Gradle zależność work-rxjava3 oprócz work-runtime.
Istnieje też zależność work-rxjava2, która obsługuje protokół rxjava2.
Następnie zamiast przedłużać subskrypcję Worker, wydłuż RxWorker. Na koniec
zastąp wartość RxWorker.createWork()
zwróci wartość Single<Result> wskazującą Result Twojego wykonania, tak
następujące:
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() }; } }
Zauważ, że funkcja RxWorker.createWork() jest wywołana w wątku głównym, ale funkcja zwraca
domyślnie ustawiona jest wartość subscribed w wątku w tle. Możesz zastąpić parametr RxWorker.getBackgroundScheduler(), aby zmienić
w wątku subskrybowania.
Gdy RxWorker ma wartość onStopped(), subskrypcja zostanie usunięta, więc
nie musisz w żaden specjalny sposób radzić sobie z przerwami w pracy.