ReactiveX

RxLifecycle 라이브러리

smomo 2021. 8. 22. 11:50

이 라이브러리는 불완전한 구독으로 인해 메모리 누수가 발생할 수있는 Android에서 유용하며

안드로이드의 라이프 사이클에 맞게 Observable을 관리할 수 있는 Components를 제공한다.

설정

app/build.gradle 파일에 종속 항목을 추가

// If you want pre-written Activities and Fragments you can subclass as providers
implementation 'com.trello.rxlifecycle4:rxlifecycle-components:4.0.2'

// If you want pre-written support preference Fragments you can subclass as providers
implementation 'com.trello.rxlifecycle4:rxlifecycle-components-preference:4.0.2'

// If you want to use Android Lifecycle for providers
implementation 'com.trello.rxlifecycle4:rxlifecycle-android-lifecycle:4.0.2'

// If you want to use Kotlin syntax
implementation 'com.trello.rxlifecycle4:rxlifecycle-kotlin:4.0.2'

// If you want to use Kotlin syntax with Android Lifecycle
implementation 'com.trello.rxlifecycle4:rxlifecycle-android-lifecycle-kotlin:4.0.2'

RxLifeCycle Components

Components 설명
RxDialogFragment DialogFragment에 대응한다.
RxFragment Fragment에 대응한다.
RxAppCompatActivity AppCompatActivity에 대응한다.
RxAppCompatDialogFragment AppCompatDialogFragment에 대응한다.
RxFragmentActivity FragmentActivity에 대응한다.

 

기본 사용법

수명 주기 스트림을 나타내는 Observable<T>로 시작해야 한다. 그런 다음 RxLifecycle을 사용하여 시퀀스를 해당 수명 주기에 바인딩한다. 수명 주기가 무엇이든 방출할 때 바인딩할 수 있다.

myObservable
    .compose(RxLifecycle.bind(lifecycle))
    .subscribe();

특정 라이프 사이클 이벤트가 발생할 때

myObservable
    .compose(RxLifecycle.bindUntilEvent(lifecycle, ActivityEvent.DESTROY))
    .subscribe();

RxLifecycle components를 사용할 경우 

public class MyActivity extends RxActivity {
    @Override
    public void onResume() {
        super.onResume();
        myObservable
            .compose(bindToLifecycle())
            .subscribe();
    }
}

rxlifecycle-android-lifecycle을 사용하는 경우

public class MyActivity extends LifecycleActivity {
    private final LifecycleProvider<Lifecycle.Event> provider
        = AndroidLifecycle.createLifecycleProvider(this);

    @Override
    public void onResume() {
        super.onResume();
        myObservable
            .compose(provider.bindToLifecycle())
            .subscribe();
    }
}

구독 취소

RxLifecycle은 실제로 시퀀스를 구독 취소하지 않고 대신 시퀀스를 종료한다.

Observable, Flowable, Maybe는 onCompleted() 알림을

Single, Completable onError(CancellationException) 알림을 내보낸다.

Subscription.unsubscribe() 동작이 필요한 경우엔 구독을 직접 수동으로 처리하고 unsubscribe ()를 호출하는 것이 좋다.

 

rxlifecycle-kotlin 모듈은 기본 RxJava 유형에 대한 내장 확장을 제공한다.

class RxLifecycleActivity : RxAppCompatActivity() {
 
     override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
          ...  
        Observable
                .doOnDispose {}
                .bindUntilEvent(this, Lifecycle.Event.ON_PAUSE)
                .subscribe {}           
     }
}

References