Rxjava源码——订阅

看完订阅的源码发现Rxjava包装了被观察者对象,然后其它比较容易理解。

1.创建被观察者

Observable observable = Observable.create(
                new ObservableOnSubscribe<String>() {
                    @Override
                    public void subscribe(ObservableEmitter<String> emitter)
                            throws Exception {
                        emitter.onNext("Hello1");
                        emitter.onNext("Hello2");
                        emitter.onNext("Hello3");
                        emitter.onComplete();
                    }
                });

2.创建观察者

Observer<String> observer = new Observer<String>() {
            @Override
            public void onSubscribe(Disposable d) {
                Log.d("donghe", "onSubscribe");
            }

            @Override
            public void onNext(String s) {
                Log.d("donghe", "onNext : " + s);
            }

            @Override
            public void onError(Throwable e) {
                Log.d("donghe", "onError : " + e.toString());
            }

            @Override
            public void onComplete() {
                Log.d("donghe", "onComplete");
            }
        };

3.订阅观察者

observable.subscribe(observer);

分析被观察者创建的过程

public static <T> Observable<T> create(ObservableOnSubscribe<T> source) {
    //省略非核心代码
    return RxJavaPlugins.onAssembly(new ObservableCreate<T>(source));
}

跟进 new ObserableCreate(source)看到了两个信息,第一ObserableCreate继承Obserable,第二ObservableOnSubscribe是其中的一个成员变量。


public final class ObservableCreate<T> extends Observable<T> {
    final ObservableOnSubscribe<T> source;

    public ObservableCreate(ObservableOnSubscribe<T> source) {
        this.source = source;
    }
Observer创建比较简单,现实了内部的抽象方法。

分析被观察者订阅观察者

public final void subscribe(Observer<? super T> observer) {
    
    //省略非核心代码
    subscribeActual(observer) ;
}

subscribeActual()是一个抽象方法,而它的实现是ObservableCreate这个子类。跟进此类中的subscribeActual方法。

protected void subscribeActual(Observer<? super T> observer) {
    CreateEmitter<T> parent = new CreateEmitter<T>(observer);
    source.subscribe(parent);   
}

CreateEmitter包装了观察者,CreateEmitter实现如下:

static final class CreateEmitter<T>
    extends AtomicReference<Disposable>
    implements ObservableEmitter<T>, Disposable {
        final Observer<? super T> observer;

        CreateEmitter(Observer<? super T> observer) {
            this.observer = observer;
        }

        @Override
        public void onNext(T t) {
            observer.onNext(t); 
        }

        @Override
        public boolean tryOnError(Throwable t) {
            observer.onError(t);    
        }

        @Override
        public void onComplete() {
             observer.onComplete();  
            }
        }
}

订阅的核心逻辑结束了总结一下

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值