Threading in RxWorker

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.