본문 바로가기
Rx

안드로이드의 RxJava 활용 - 2(RxLifecycle 라이브러리)

by 봄석 2018. 12. 28.

본 내용은 필자가 학습한 내용을 정리하는 내용입니다.

대부분 의 내용이 아래 책의 내용이므로 원서를 구매해서 직접보시는걸 추천드립니다!

RxJava 프로그래밍 리액티브 프로그래밍 기초부터 RxAndroid까지 한 번에

유동환 , 박정준 지음 | 한빛미디어 | 2017년 09월 04일 출간

http://www.kyobobook.co.kr/product/detailViewKor.laf?ejkGb=KOR&mallGb=KOR&barcode=9788968488658&orderClick=LAV&Kc=


저자님의 블로그

https://brunch.co.kr/@yudong#info



RxLifeCycle 라이브러리

RxAndroid 에는 RxLifeCycle라는 라이브러리를 제공합니다 . 

안드로이드 액티비티와 프레그먼트의 라이프사이클을 RxJava에서 사용할 수 있게 합니다.

좀 더 구체적으로 설명하면, 안드로이드와 UI 라이프사이클을 대체한다기 보다 구독할 때 발생할 수 있는 메모리 누수를 방지하기 위해 사용합니다.

완료하지 못한 구독을 자동으로 해제합니다.


RxLifeCycle 라이브러리는 안드로이드의 라이프 사이클에 맞게 Observable을 관리할 수 있는 컴포넌트를 제공합니다


RxLifeCycle 라이프 사이클 컴포넌트

컴포넌트

설명 

 RxActivity 

 액티비티에 대응합니다 

 RxDialogFragment 

 Native/Support 라이브러리인 DialogFramgment에 대응합니다. 

 RxFragment 

 Native/Support 라이브러리인 Fragment에 대응합니다. 

 RxPreferenceFragment 

 PreferenceFragment 에 대응합니다. 

 RxAppCompatActivity 

 Support라이브러리 AppCompatActivity에 대응합니다. 

 RxAppCompatDialogFragment 

 Support라이브러리 AppCompatDialogFragment에 대응합니다.

 RxFragmentActivity 

 Supprot 라이브러리 FragmentActivity에 대응합니다 


RxLifeCycle 라이브러리 사용을 위한 환경설정

 //RxLifecycle 2.x
implementation 'com.trello.rxlifecycle2:rxlifecycle-android:2.1.0'
implementation 'com.trello.rxlifecycle2:rxlifecycle:2.1.0'

 implementation 'com.trello.rxlifecycle2:rxlifecycle-components:2.1.0'




RxLifeCycle 라이브러리 활용 예

public class HelloActivityV3 extends RxAppCompatActivity {
 
    @BindView(R.id.textView)
    TextView textView;
 
    private Unbinder mUnbinder;
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        mUnbinder=ButterKnife.bind(this);
 
        Observable.just("Hello, rx world")
                .compose(bindToLifecycle())
                .subscribe(textView::setText);
    }
 
    @Override
    protected void onDestroy() {
        super.onDestroy();
        if(mUnbinder !=null){
            mUnbinder.unbind();
        }
    }

}



AppCompatActivity 클래스 대신 RxAppCompatActivity 클래스를 상속하도록 바꿨고,

Observable 생성 부분에서는 compose() 함수로 라이프 사이클을 관리하도록 추가했습니다. Observable은 HelloActivityV3 클래스가 종료되면 자동으로 해제(dispose) 됩니다.


한편 RxJava 2.x 에서는 RxLifecycle의 컴포넌트 이외에도 메모리 관리를 위한 방법을 제공합니다 . 예를들어 RxJava에 익숙한 개발자들은 안드로이드의 전통적인 라이프 사이클 관리 기법보다는 직접 관리하기 편한 dispose() 함수를 사용하는 것 등에 있습니다.



댓글