[목차]==================================================
1. Observable을 만드는 Operator 목록
2. Create
3. Defer
4. Empty/Never/Throw
4. Empty/Never/Throw
5. From
6. Interval
7. Just
8. Range
9. Repeat
10. Start
11. Timer
6. Interval
7. Just
8. Range
9. Repeat
10. Start
11. Timer
======================================================
Observable을 좀 더 쉽게 만들 수 있는 방법이 있습니다.
바로 미리 생성된 Operator를 사용하는 것 입니다
바로 미리 생성된 Operator를 사용하는 것 입니다
1. Observable을 만드는 Operator 목록
just( ) — convert an object or several objects into an Observable that emits that object or those objects
from( ) — convert an Iterable, a Future, or an Array into an Observable
repeat( ) — create an Observable that emits a particular item or sequence of items repeatedly
repeatWhen( ) — create an Observable that emits a particular item or sequence of items repeatedly, depending on the emissions of a second Observable
create( ) — create an Observable from scratch by means of a function
defer( ) — do not create the Observable until a Subscriber subscribes; create a fresh Observable on each subscription
range( ) — create an Observable that emits a range of sequential integers
interval( ) — create an Observable that emits a sequence of integers spaced by a given time interval
timer( ) — create an Observable that emits a single item after a given delay
empty( ) — create an Observable that emits nothing and then completes
error( ) — create an Observable that emits nothing and then signals an error
never( ) — create an Observable that emits nothing at all
from( ) — convert an Iterable, a Future, or an Array into an Observable
repeat( ) — create an Observable that emits a particular item or sequence of items repeatedly
repeatWhen( ) — create an Observable that emits a particular item or sequence of items repeatedly, depending on the emissions of a second Observable
create( ) — create an Observable from scratch by means of a function
defer( ) — do not create the Observable until a Subscriber subscribes; create a fresh Observable on each subscription
range( ) — create an Observable that emits a range of sequential integers
interval( ) — create an Observable that emits a sequence of integers spaced by a given time interval
timer( ) — create an Observable that emits a single item after a given delay
empty( ) — create an Observable that emits nothing and then completes
error( ) — create an Observable that emits nothing and then signals an error
never( ) — create an Observable that emits nothing at all
package tiii.com.rxandroid; import android.os.Bundle; import android.widget.TextView; import com.trello.rxlifecycle.components.support.RxAppCompatActivity; import rx.Observable; import rx.functions.Action1; public class MainActivity extends RxAppCompatActivity { public static final String TAG = MainActivity.class.getSimpleName(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Observable .just("Hello RxAndroid !!") .compose(this.<String>bindToLifecycle()) .subscribe(new Action1<String>() { @Override public void call(String s) { ((TextView) findViewById(R.id.textview)).setText(s); } }); } } |
2. Create
- 수동으로 옵져버 메소드 호출하여 새로운 Observable을 생성
- 언뜻본다면 큰 문제는 없어 보인다.
물론 Observable.from() 를 사용한다면 subscriber.onComplete() 와 같은 코드를 신경쓰지 않고 더 편하게 사용이 가능하다
하지만 Observable.just() 나 Observable.from() 와 같은 경우 발행되는 Item 들이 observable 생성시점에 이미 정해져있어야 한다.
즉 Database 상에서 데이터를 읽어 오는 작업과 같이 비용이 큰 작업들을 비동기로 처리하고자 할 때에는 적절하지 않다. - 이처럼
Observable.create()
만으로는 간단한 비동기 처리 흐름을 만들기는 어려운 작업이며 실수할 여지가 매우 많다.
그래서 많은 개발자들은Observable.create()
대신Observable.defer()
를 사용하는걸 추천한다.
Observable.create(new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> subscriber) {
try {
subscriber.onNext("Hello_Create");
subscriber.onCompleted();
} catch (Exception e) {
subscriber.onError(e);
}
}
})
.compose(mMainView.ActivityLifecycleProvider().bindToLifecycle())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(s -> {
Log.d(TAG, s);
mMainView.TextChange(s);
},
throwable -> throwable.printStackTrace(),
() -> {
Log.d(TAG, "onComplete");
LogTextView();
}
);
|
3. Defer
- 구독하기 전까지 Observable을 생성하지 않습니다. 그리고 각각의 옵져버에게 매번 새로운 Observable을 생성합니다.
- 다른 생성 오퍼레이터와 다른 점이 뭔지 애매했었는데 데이타스트림이 메모리에 할당되는 타이밍이 다른 것이 였습니다. 다른 오퍼레이터들은 오퍼레이터를 선언하는 순간 메모리에 할당 되지만 defer는 subscribe가 호출 될 때에 할당 된다고 합니다.
Observable.defer(() -> {
return SomethingLongTask(); //return Observable<String>
})
.compose(mMainView.ActivityLifecycleProvider().bindToLifecycle());
.observeOn(AndroidSchedulers.mainThread())
.subscribe(s -> {
Log.d(TAG, s);
mMainView.TextChange(s);
},
throwable -> throwable.printStackTrace(),
() -> {
Log.d(TAG, "onComplete");
LogTextView();
}
);
|
- Observable.defer() 비동기로 observable 을 생성하고 하위 스트림에서 사용할 수 있도록 해준다.
Observable.defer(() -> { List<Book> books = dao.findAll(); return Observable.just(books); }) .subscribeOn(Schedulers.io()) .subscribe(books -> { // Next Step }, throwable -> { // Error handling }); |
여기서는 dao.findAll() 을 통해 반환된 결과를 Observable.just() 를 사용하여 새로운 작업흐름을 만들고 반환하였다. observable 을 만들기 위한 observable 이 필요하다는 점에서 추가되는 비용이 있지만 Observable.create() 보다는 훨씬 간결한 코드가 만들어졌다. 명시적으로 onComplete() 나 onError() 를 처리해줄 필요가 없으며, subscriber 의 구독상태를 확인할 필요도 없다. |
4. Empty/Never/Throw
매우 정확하고 제한적인 행동의 Observable을 생성합니다.
1) Empty
1) Empty
- 방출하는 아이템이 없고 정상적으로 종료되는 옵저버블을 생성합니다.
2) Never
- 방출하는 아이템이 없고 종료되지 않는 옵저버블을 생성합니다.
3) Throw
- 방출하는 아이템이 없고 에러를 발생하여 종료되는 옵저버블을 생성합니다.
5. From
- 배열이나 Iterable의 요소를 순차적으로 방출 시키는 Observable으로 변환
6. Interval
- 특정한 시간 간격으로 아이템을 방출하는 Observable을 생성합니다.
- 일정시간 마다 반복적인 작업이 필요할 때 사용
7. Just
- 오브젝트나 오브젝트셋을 바로 방출하는 Oservable으로 변환
- 만약에 아무것도 하지 않는 옵저버블을 만들기 위해 null 을 넣는다면 null을 방출하는 옵저버블이 만들어 집니다.
- 아무것도 하지 않은 옵저버블을 원하신다면 empty를 사용하시면 됩니다.
8. Range
- 정수의 순차적인 범위를 가지고 있는 Observable을 생성
- Interval과 비슷하지만 반복횟수의 제한이 있습니다. m개 만큼의 반복
9. Repeat
- 일정 횟수를 반복하는 Observable을 생성
- 이 오퍼레이터는 단독으로 사용되지 않고 다른 오퍼레이터 뒤에 붙여서 사용되며 .Repeat(n) 바로 앞 오퍼레이터를 일정횟수 만큼 반복
10. Start
- 함수의 결과 값을 방출하는 Observable을 생성
- https://github.com/ReactiveX/RxJavaAsyncUtil을 디펜던시에 추가해야 사용 할 수 있다.
- 추가한 디펜던시에서 사용할 수 있는 오퍼레이터는 아래의 링크에서확인이 가능 합니다. https://github.com/ReactiveX/RxJava/wiki/Async-Operators
Start
11. Timer
- 일정 시간의 딜레이 이후에 단일 항목을 방출하는 Observable을 생성
출처 : 인터넷에서 RxAndroid 검색하여 필요한 정보를 다양한 사이트에서 종합하여 작성된 것입니다. 많은 사이트 내용을 종합하여 공부하여 작성하다보니 일일이 나열하지 못하였습니다. ㅈㅅ(_ _) 이글은 자유롭게 퍼 가셔서 도움이 되었으면 좋겠습니다. 감사합니다.
댓글 없음:
댓글 쓰기