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.