直接上代碼,以下代碼爲根據RxLifeCycle的實現提取出的一個完整的上游數據源到下游數據源所經過的歷程
,註釋已經寫的差不多了
Ob
.compose(new ObservableTransformer<Object, Object>() {
@Override
public ObservableSource<Object> apply(Observable<Object> upstream) {
//一個subject既是Observable又是Observer
Observable<ActivityEvent> activityEventObservable = OpenAccountActivity.this.provideLifecycleSubject()
//Ob只會向最後訂閱的Ov發送事件,調用share即可以
.share();
return upstream
//takeUntil有兩種實現
// 一種是:當返回true時,就發送onComplete
// 另一種是:當(參數指定的)數據源發射事件時,發送onComplete
//這裏採用第二種,同時藉助filter操作符(控制數據源發送的事件是否會被攔截),實現當到達對應生命週期時發送onComplete的效果
.takeUntil(
//每當聯合的數據源中,有數據源發送新的事件時,就會將所有的數據源發送的最新事件合併起來,發送一個新的事件
//這裏利用這個特性,在每個生命週期方法的最後調用onNext發送生命週期事件
Observable.combineLatest(
//將訂閱時的生命週期轉化爲停止發射事件的生命週期
activityEventObservable
.take(1)
.map(new Function<ActivityEvent, ActivityEvent>() {
@Override
public ActivityEvent apply(ActivityEvent activityEvent) throws Exception {
return activityEvent;
}
}),
//跳過訂閱時的生命週期,當後續生命週期發送
activityEventObservable
.skip(1),
new BiFunction<ActivityEvent, ActivityEvent, Boolean>() {
@Override
public Boolean apply(ActivityEvent bindUntilEvent, ActivityEvent lifecycleEvent) throws Exception {
return lifecycleEvent.equals(bindUntilEvent);
}
})
//是否攔截事件
.filter(b -> b));
}
})