[안드로이드] RxAndroid 사용법 및 정리!!(asynctask deprecated)
프로그래밍/안드로이드2020. 9. 26. 15:28
반응형
asynctask를 잘 쓰고 있었는데 이제 deprecated 된다고 해서 찾아보니
RxAndroid를 써야 될거 같은데 생각보다 어렵더라고요
RxJava로 안써봐서 잘 이해가 안되서 이런저런 자료 찾아본걸 정리합니다
Observable.create
- - Observable가 아이템을 발행하기 위해서는 onNext(), onError(), onCompleted()를 적절히 호출해야 된다
- - onError()과 onCompleted()는 동시에 호출할 수 없는 상호 배타적 관계로 onError()가 호출 될때는 onCompleted()를 호출하지 않아야 되고 반대도 마찬가지
- - onError()과 onCompleted() 중 하나가 호출된 이후에는 Observable의 어떤한 연산자도 호출하지 않아야 된다
- - subscribeOn이 Schedulers.io()일 경우 onComplete를 호출하지 않으면 계속해서 대기상태
- - create()를 사용할때 Observable가 데이터를 방출(emit) 하기 전에 구독자가 구독취소를 하게 되면 UndeliverableException 발생
Observable<String> observable1 = Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(ObservableEmitter<String> emitter) throws Exception {
emitter.onNext("1");
emitter.onNext("3");
emitter.onNext("5");
}
}).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
observable1.subscribe(new Observer<String>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(String s) {
Log.i("sinwhod","onNext = " + s);
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
Log.i("sinwhod","onComplete");
}
});
Observable.just
- - 데이터를 바로 방출할때 사용
- - onNex()나 onComplete()등과 같이 별도로 메서드를 호출할 필요가 없고 just()로 데이터만 넘겨주면 옵저버의 역할은 끝
// Observer에 data를 보냄
Observable observable = Observable.just(data);
// Observable에서 보낸 데이터를 받음
Observer<String> observer = new Observer<String>() {
@Override
public void onSubscribe(Disposable d) {
Log.i("sinwhod","Disposable = " + d);
}
@Override
public void onNext(String s) {
Log.i("sinwhod","onNext = " + s);
}
@Override
public void onError(Throwable e) {
Log.i("sinwhod","onError = " + e);
}
@Override
public void onComplete() {
Log.i("sinwhod","onComplete");
}
};
observable
.subscribeOn(Schedulers.newThread()) // 멀티쓰레드를 적용하고자 할때 사용, subscribeOn는 메인쓰레드가 아닌 어디서 실행할지 설정?
.observeOn(AndroidSchedulers.mainThread()) // Observable에서 보낸 데이터를 Observer가 받아서 subscribe 할때, 데이터를 가공해서 어디다 그 결과를 보낼지 설정
.subscribe(observer); // Observable에서 보낸 데이터를 받을 Observer 지정(Observable와 Observer를 연결)
Observable.defer
- - defer로 생성된 Observable는 create나 just와 다르게 옵저버가 구독하기 전까지는 Observable를 생성하지 않는다
- - defer은 subscribe가 호출될때 할당
- - 각각의 옵저버에게 매번 새로운 Observable를 생성, 즉 subcribe() 함수를 호출할 때까지 stream 생성을 미루면서 호출될때마가 새로운 Observable을 생성하여 데이터를 보낸다
- - just와 같이 onNext나 onCompleted등을 호출할 필요 없음
Observable.fromCallable
- - fromCallable은 defer와 마찬가지로 스트림 생성을 지연하는 효과를 가지고 있음
- 차이점은 데이터를 방출(emit) 할 때 추가로 Observable을 생성하지 않고 바로 데이터를 스트림으로 전달할 수 있다는 점
반응형
'프로그래밍 > 안드로이드' 카테고리의 다른 글
[안드로이드] 아주 간단히 Listview 사용하기!!! (0) | 2020.11.09 |
---|---|
[안드로이드] txt 파일 내용 읽기!!(한글깨짐 문제 해결) (0) | 2020.10.11 |
[안드로이드] App restart successful without requiring a re-install 에러 해결 방법!! (0) | 2020.09.03 |
[안드로이드] sqlite 특정 조건에 맞지 않는 데이터만 삭제 하는 방법!!! (0) | 2020.09.01 |
[안드로이드] 안드로이드 핸들러(Handler) 사용법!! (0) | 2020.07.04 |