[RxJava] RxJava의 잘못된 이해 학습
fromCallable
와 just
조작부호의 사용에 대한 문제점을 코드에 대한 분석을 하겠습니다.코드 사상
/**
*
**/
String getMessage() {
Log.d("RxJava", Thread.currentThread().getName());
return "getMessage";
}
/**
*
**/
Subscriber<Object> getSubscriber() {
return new Subscriber<Object>() {
@Override
public void onCompleted() {
Log.d("RxJava", "onCompleted");
}
@Override
public void onError(Throwable e) {
Log.d("RxJava", "onError : " + e.toString());
}
@Override
public void onNext(Object o) {
Log.d("RxJava", "onNext : " + o);
Log.d("RxJava", Thread.currentThread().getName());
}
};
}
fromCallable
연산자 사용public void run() {
Observable<String> o = Observable.fromCallable(new Callable<String>() {
@Override
public String call() throws Exception {
return getMessage();
}
});
o.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(getSubscriber());
}
just
연산자 사용public void run() {
Observable<String> o = Observable.just(getMessage());
o.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(getSubscriber());
}
실행 결과
fromCallable
를 사용할 때 getMessage는 하위 라인에서 실행되고 just
는 주 라인에서 실행됩니다.원작자가 내린 결론은 Observable을 사용하는 것이다.fromCallable () 방법은 두 가지 장점이 있습니다: 1.전송할 데이터를 가져오는 코드는 Observer가 구독한 후에만 실행됩니다. 2.데이터를 가져오는 코드는 하위 라인에서 실행할 수 있습니다.
나는 이러한 결론에 문제가 있다고 생각한다. 내가 코드를 수정해서 분석해 보겠다.
Observable<String> getObservable(final String s) {
return Observable.fromCallable(new Callable<String>() {
@Override
public String call() throws Exception {
return s;
}
});
}
public void run() {
Observable<String> o = Observable.getObservable(getMessage());
o.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(getSubscriber());
}
실행 결과 getMessage가 주 스레드에서 실행되고 있음을 알 수 있습니다.왜 그럴까?사실 이것이 바로 자바 언어의 호출 순서의 문제이지 조작부호의 기능이 아니다.Rxjava를 공부하는 과정에서 원래의 자바 언어 구조에서 벗어나지 않기를 바랍니다. 왜냐하면 라jva의 원본 코드도 자바 언어가 쓴 것이기 때문입니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.