Cómo ejecutar subprocesos en RxWorker

Proporcionamos interoperabilidad entre WorkManager y RxJava2. Para comenzar, incluye la dependencia work-rxjava2 además de work-runtime en tu archivo de gradle. Luego, en lugar de extender Worker, deberías extender RxWorker. Por último, anula el método RxWorker.createWork() para mostrar Single<Result>, que indica el Result de tu ejecución, de la siguiente manera:

    public class RxDownloadWorker extends RxWorker {

        public RxDownloadWorker(Context context, WorkerParameters params) {
            super(context, params);
        }

        @Override
        public Single<Result> createWork() {
            return Observable.range(0, 100)
                .flatMap { download("https://www.google.com") }
                .toList()
                .map { Result.success() };
        }
    }
    

Ten en cuenta que se llama a RxWorker.createWork() en el subproceso principal, pero el valor de retorno se suscribe en un subproceso en segundo plano de forma predeterminada. Puedes anular RxWorker.getBackgroundScheduler() para cambiar el subproceso de suscripción.

Cuando se detiene un RxWorker, se eliminan los Observer correctamente, por lo que no es necesario que controles los paros laborales de ninguna manera especial.