Tworzenie wątków w środowisku RxWorker

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.