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.