Nous assurons l'interopérabilité entre WorkManager et RxJava. Pour commencer, incluez la dépendance work-rxjava3
en plus de work-runtime
dans votre fichier Gradle.
Il existe également une dépendance work-rxjava2
compatible avec RxJava2.
Ensuite, étendez RxWorker
au lieu de Worker
. Enfin, remplacez la méthode RxWorker.createWork()
pour renvoyer un Single<Result>
indiquant le Result
de votre exécution, comme suit :
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() }; } }
Notez que RxWorker.createWork()
est appelé sur le thread principal, mais que la valeur renvoyée est abonné à un thread en arrière-plan par défaut. Vous pouvez ignorer RxWorker.getBackgroundScheduler()
pour modifier le thread d'abonnement.
Lorsqu'une valeur de RxWorker
est onStopped()
, l'abonnement est supprimé. Aucun traitement particulier des arrêts de tâches n'est donc nécessaire.