Tworzenie wątków w środowisku RxWorker

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.