Threading in RxWorker

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.