[RxJava^Android]項目經驗分享 --- RxLifecycle功能實現分析(一)

  最近在研究RxJava自定義操做符的實現原理,發現成型的項目案例較少。忽然想起在項目中應用的RxLifecycle是使用自定義操做符,便拿來研究了一下。分析以前,跟你們瞭解一些相關操做符和RxLifecycle工具包的做用。java

RxLifecycle

  用來嚴格控制因爲發佈了一個訂閱後,沒有及時取消,致使Activity/Fragment沒法銷燬致使的內存泄露。使用方式參考官方github說明,這裏不作重點說明。git

RxJava操做符

  這裏是稍微重點介紹一下幾個操做符,方便對RxLifecycle實現原理的理解。github

1.compose操做符

  組合操做符,建立一個自定義的操做符與Transformer配合使用,將原始Observable進行變換操做、內聯其餘操做符等。ide

2.Transformer

  自定義操做符變換器,實現方式以下:工具

public class MyTransformer<T> implements Observable.Transformer<T, T> {
    @Override
    public Observable<T> call(Observable<T> source) {
    
        //定義變換規則
        return source.map(new Func1<T, T>() {
            @Override
            public T call(T t) {
                return t;
            }
        }).subscribeOn(Schedulers.io());
    }
}

3.BehaviorSubject

  BehaviorSubject是Subject的用途之一。Subject在ReactiveX是做爲observer和observerable的一個bridge。由於它是一個觀察者,因此它能夠訂閱一個或多個可觀察對象,同時由於他是一個可觀測對象,因此它能夠傳遞和釋放它觀測到的數據對象,而且能釋放新的對象。code

  BehaviorSubject,它一開始就會釋放Observable最近釋放的一個數據對象,當尚未任何數據釋放時,它則是一個默認值。接下來就會釋放Observable釋放的全部數據。若是Observable因異常終止,BehaviorSubject將不會向後續的Observer釋放數據,可是會向Observer傳遞一個異常通知。orm

BehaviorSubject<Integer> subject = BehaviorSubject.create();
        subject.onNext(1);
        subject.onNext(2);
        subject.subscribe(new Action1<Integer>() {
            @Override
            public void call(Integer integer) {
                Log.d(Utils.TAG, "integer : " + integer);
            }
        });
        subject.onNext(3);

執行結果server

04-26 17:20:15.796 16908-16908/qulei.rxjava.demo D/RxJava: integer : 2
04-26 17:20:15.796 16908-16908/qulei.rxjava.demo D/RxJava: integer : 3
相關文章
相關標籤/搜索