RxWorker의 스레딩

WorkManager와 RxJava 간 상호운용성을 제공합니다. 시작하려면 gradle 파일에 work-runtime 외에도 work-rxjava3 종속 항목을 포함해야 합니다. 대신 rxjava2를 지원하는 work-rxjava2 종속 항목도 있습니다.

그런 다음 Worker를 확장하는 대신 RxWorker를 확장해야 합니다. 마지막으로 RxWorker.createWork() 메서드를 재정의하여 다음과 같이 실행 Result를 나타내는 Single<Result>를 반환합니다.

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() }
    }
}

자바

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() };
    }
}

RxWorker.createWork()는 기본 스레드에서 호출되지만, 반환 값은 기본적으로 백그라운드 스레드에서 구독됩니다. RxWorker.getBackgroundScheduler()를 재정의하여 구독 스레드를 변경할 수 있습니다.

RxWorkeronStopped()면 구독이 소멸되므로 특별한 방식으로 작업 중지를 처리할 필요가 없습니다.