Wir bieten Interoperabilität zwischen WorkManager und RxJava. Um loszulegen,
Fügen Sie in Ihrer Gradle-Datei zusätzlich zu work-runtime
die Abhängigkeit work-rxjava3
ein.
Es gibt auch eine work-rxjava2
-Abhängigkeit, die stattdessen rxjava2 unterstützt.
Statt Worker
zu erweitern, sollten Sie dann RxWorker
erweitern. Zuletzt
RxWorker.createWork()
überschreiben
, um ein Single<Result>
-Objekt zurückzugeben, das den Result
Ihrer Ausführung angibt,
folgt:
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, aber die Rückgabe
-Wert wird standardmäßig für einen Hintergrundthread abonniert. Sie können RxWorker.getBackgroundScheduler()
überschreiben, um
einen Thread abonniert.
Wenn RxWorker
onStopped()
ist, wird das Abo entfernt, sodass
Sie müssen nicht gesondert mit Arbeitsunterbrechungen umgehen.