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.