Zapewniamy interoperacyjność między rozwiązaniami WorkManager i RxJava. Na początek dodaj do pliku Gradle zależność work-rxjava3
oprócz work-runtime
.
Istnieje też zależność work-rxjava2
, która obsługuje zamiast tego plik rxjava2.
Następnie zamiast przedłużać ten okres (Worker
), przedłuż okres RxWorker
. Na koniec zastąp metodę RxWorker.createWork()
, aby zwrócić Single<Result>
wskazujący Result
wykonania, w ten sposób:
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 wartość RxWorker.createWork()
jest wywoływana w wątku głównym, ale wartość zwrotna jest domyślnie ustawiona na subscribed w wątku w tle. Aby zmienić wątek subskrybowania, możesz zastąpić ciąg RxWorker.getBackgroundScheduler()
.
Gdy RxWorker
ma wartość onStopped()
, subskrypcja zostanie usunięta, więc nie musisz w żaden inny sposób obsługiwać przerw w pracy.