ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • RxLifecycle 라이브러리
    ReactiveX 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

     

     

    'ReactiveX' 카테고리의 다른 글

    RxPermissions, RxBinding 라이브러리  (0) 2021.08.17
    Subject  (0) 2021.05.15
    RxAndroid  (0) 2021.05.02
    [RxJava] Scheduler  (0) 2021.05.01
    [RxJava] Single, Maybe  (0) 2021.05.01
Designed by Tistory.