일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 미놀타
- e마운트
- SSL
- COLORPLUS
- fm2
- Flavor
- Realm
- gradle
- Nikon
- portra400
- variants
- himatic7sii
- 풀프레임
- Sony
- film
- himatic7s2
- 필름카메라
- himatic
- Android
- Git
- Exception
- 35mmf2.8
- It
- 니콘
- 하이매틱
- rx
- emount
- fullframe
- Minolta
- Kodak
- Today
- Total
BloByJames
RxJava로 EventBus, Otto를 대체해보자 본문
새로운 패러다임으로 상승세를 달리고 있는 ReactiveX(Rx)
Rx에 익숙해진다면 코드가 간결해지므로 가독성은 물론이고,
제공하는 기능이 무수히 많기 때문에, 기존 언어의 문법을 대신해서 많이 사용하게 될 것 입니다.
하지만 처음부터 익숙해지기란 어려우니, Rx로 대체할 수 있는 것들을 차츰 바꿔가는 것을 추천해드립니다.
여기서 소개할 Rx event는 RxJava와 RetroLambda를 사용하여 설명해드리는 점 미리 말씀드립니다.
저도 EventBus 참 좋아하는데요,
Android event 관련 대표적 라이브러리인 EventBus, Otto 등을 RxJava로 대체할 수 있다는 점.
우선 event Class를 singleton으로 생성합니다.
여기서 주의해야 할 점은
private PublishSubject<Object> mSubject;
public Observable<Object> getObservable() {
return mSubject;
}
public void sendEvent(Object object) {
mSubject.onNext(object);
}
PublishSubject와 getObservable()의 return type인 Observable의 generic,
마지막으로 sendEvent(Object)의 parameter.
세 개가 모두 같은 type이어야 합니다.
여기서는 최상위 Class인 Object를 사용하고 있지만,
event로 전달하고자 하는 type으로 변경해서 사용하시면 됩니다.
이제 event를 만들었으니 전달해봅시다.
event가 전달됐으니 누군가는 받아야겠죠?
subscribe()에서 순서대로 onNext(), onError(), onCompleted() 세 가지를 모두 사용했지만,
event를 subscribe 할 때 마다 모두 사용하는 것은 불편해요.
onNext()만 사용할 수도 있고, onNext()와 onError()만 사용할 수도 있는 interface가 있으니,
필요에 맞게 사용하시면 됩니다.
(TIP, onNext()만 사용하다가 error가 발생하면 app이 죽어요.
최소한 onError()까지 처리를 해줍시다.
그 밖에도 여러가지 error handling이 있지만, 이 글은 Rx를 소개하는 포스팅이 아니므로...)
이제 끝났어요.
하지만, 개발자라면 memory 관리에도 신경을 써줘야지요.
Rx를 사용하면서 주의해야 할 점이 있습니다.
subscribe가 있다면, unsubscribe 역시 필요합니다.
그렇지 않으면 memory leak이 발생할 수 있으니 주의해야합니다.
그럼 Rx memory를 관리해주는 library를 하나 소개해드릴게요.
trello에서 개발 한 RxLifeCycle입니다.
이름에서부터 뭔가 느껴지지 않나요?
맞습니다.
Activity, Fragment, DialogFragment의 life cycle에서 unsubscribe를 대신 해 줄 친구입니다.
사용법 또한 아주 간단합니다.
그럼, RxLifeCycle 예시 코드를 보여드리고 마치겠습니다.
위에서 event를 전달받는 code와 무엇이 달라졌는지 보이시나요?
바로 RxActivity를 상속받고 있습니다.
그리고 Observable에 compose()라는 method가 하나 추가되었는데요,
bindToLifeCycle()은 기본적으로 subscribe 한 life cycle에 따라서,
onCreate()는 onDestroy(),
onStart()는 onStop(),
onResume()는 onPause(),
onStop()은 onDestroy()
에서 unsubscribe를 하게 됩니다.
제공하는 component는 아래와 같습니다.
그리고, support library
이렇게 준비되어있으니, 각 component를 상속받아서 사용하시면 됩니다.
물론, 이 밖에도 다양한 지원이 있으므로, 문서를 읽어보시기 바랍니다.
감사합니다.
'프로그래밍 > 안드로이드' 카테고리의 다른 글
날 미치게 하는 Exception: io.realm.exceptions.RealmError: Unrecoverable error. (0) | 2016.11.08 |
---|---|
Gradle Flavor 그리고 google-services.json (0) | 2016.10.21 |
Gradle Flavor 그리고 apk build (0) | 2016.10.08 |
ViewPager와 Fragment 사용하기 (Fragment 함수 호출) (0) | 2016.09.28 |
날 미치게 하는 Exception: Invalid format of Realm file. (0) | 2016.09.21 |