Como criar threads no RxWorker

Fornecemos interoperabilidade entre o WorkManager e o RxJava. Para começar, inclua a dependência work-rxjava3, além de work-runtime no arquivo Gradle. Também há uma dependência work-rxjava2 compatível com rxjava2.

Depois, em vez de estender o Worker, estenda o RxWorker. Por fim, substitua o método RxWorker.createWork() para retornar um Single<Result> indicando o Result da sua execução, da seguinte maneira:

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() };
    }
}

Observe que RxWorker.createWork() é chamado na linha de execução principal, mas o valor de retorno é inscrito em uma linha de execução em segundo plano por padrão. Você pode substituir RxWorker.getBackgroundScheduler() para mudar a linha de execução de inscrição.

Quando um RxWorker é onStopped(), a inscrição é descartada. Portanto, você não precisa lidar com interrupções de trabalho de nenhuma forma especial.