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()
를 재정의하여 구독 스레드를 변경할 수 있습니다.
RxWorker
가 onStopped()
면 구독이 소멸되므로 특별한 방식으로 작업 중지를 처리할 필요가 없습니다.