본문 바로가기
Android 개발/Retrofit, OKHttp, Moshi, RxAndroid

RxAndroid :: Subscription 을 Unsubscribe 해서 Memory Leak을 막자

by Developer88 2017. 2. 22.
반응형

RxAndroid를 사용할 때 주의해야 할 부분 중에 하나는,

적절한 시점에 unsubscribe해주지 않으면 메모리 leak으로 연결될수도 있다는 점인데요.

오늘은 Subscription을 unsubcribe()하는 방법에 대해서 정리해 보도록 하겠습니다.


참고로 RxAndroid에 대한 기본적인 사항들은,

아래링크에서 먼저 읽어주세요~.

>>> RxAndroid 이해하기 Part1 <<<



1. Subscription


먼저,  Subscription을 변수로 담으려고 하는데요.

이전글에서 사용했던 예제를 가지고 수정해서 사용해보겠습니다.


참고로 이전글은 아래링크를 보시면 됩니다.

>>> RxAndroid의 Map 과 FlatMap 메소드를 알아보자 <<<


우선 구독할(Subscribe할) Observable을 mObservable로 받구요.




이 Observable을 Subscribe해서 mSubscription로 받습니다.




2. 개별적 unsubscibe


unsubscibe하는 것은 너무나 쉽습니다.

onDestroy시에 구독을 해제해야 한다면 아래와 같이 unsubscribe()메소드만 사용하면 되니까요.

참고로 isUnsubscribed는 Unsubscribed되있는지를 알려주는 메소드입니다.



네, 이렇게 하면 구독을 해제하고 변수도 비울 수 있는데요.

RxJava(RxAndroid) 에서는 여러 Subscription을 하나로 관리할 수 있는 방법을 제공하는데요.

그것들을 아래에서 보도록 하겠습니다.



2. 전체 Subscription clear


RxJava(RxAndroid)에서는 CompositeSubscription을 제공해주어서, 

Subscription들을  CompositeSubscription객체에 add메소드로 추가한 다음, 

한번에 해제할 수 있도록 해주었는데요.


실제 코드를 보면서 정리해보겠습니다.

먼저 CompositeSubscription객체를 생성 해주구요.




다음으로 기존의 subscription을 CompositeSubscription에 add메소드로 추가해 줍니다.




전체 Subscription들을 해제할 때는,

unsubscibe도 쓸 수 있지만,

clear메소드를 쓰는 것이 더 좋습니다.

왜냐하면, clear메소드가 unsubscibe뿐만이 아니라, 레퍼런스들도 모두 비워주기 때문이지요.


소스 코드를 한번 쓱 보고 가겠습니다.


 


그럼 이제 실제로 아래와 같이, clear()메소드를 사용해보겠습니다.




unsubscribe 뿐만이 아니라, Subscription도 empty로 만들어주는 정말 편리한 메소드이기 때문에,

꼭 여러개를 사용하지 않더라도, 이 방법을 사용한다면 RxAndroid를 사용하다 생기는, memory leak을 막는데 도움이 되겠네요.


728x90

댓글