Wir bieten Interoperabilität zwischen WorkManager und RxJava. Füge der Gradle-Datei zuerst work-rxjava3
-Abhängigkeit zusätzlich zu work-runtime
hinzu.
Es gibt auch eine work-rxjava2
-Abhängigkeit, die stattdessen rxjava2 unterstützt.
Anstatt Worker
zu erweitern, sollten Sie dann RxWorker
erweitern. Überschreiben Sie schließlich die Methode RxWorker.createWork()
, um einen Single<Result>
zurückzugeben, der den Result
Ihrer Ausführung angibt:
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() }; } }
Beachten Sie, dass RxWorker.createWork()
im Hauptthread aufgerufen wird, der Rückgabewert jedoch standardmäßig für einen Hintergrundthread subscribed ist. Sie können RxWorker.getBackgroundScheduler()
überschreiben, um den abonnierenden Thread zu ändern.
Wenn ein RxWorker
den Wert onStopped()
hat, wird das Abo verworfen, sodass Sie mit Unterbrechungen von Arbeitslasten nicht auf eine besondere Weise umgehen müssen.