Rxjava源碼在探(一)

    
    
            //1,創建被觀察者
    new ObservableOnSubscribe() {
    
       void subscribe(@NonNull ObservableEmitter<T> emitter) throws Exception;
       
                   source.subscribe(parent);
                   
                       final ObservableOnSubscribe<T> source;
                       
                       public interface ObservableOnSubscribe<T> {
                       
                           void subscribe(@NonNull ObservableEmitter<T> emitter) throws Exception;
                           
                      CreateEmitter<T> parent = new CreateEmitter<T>(observer);      

                            CreateEmitter    implements ObservableEmitter<T>                      
                      
                                CreateEmitter(Observer<? super T> observer) {
                                
                                   public void subscribe(ObservableEmitter<Object> e) throws Exception {
                                   
                                   
        protected void subscribeActual(Observer<? super T> observer) {
            
                  protected abstract void subscribeActual(Observer<? super T> observer);
                  
                   subscribeActual(observer);
                   
                               observer = RxJavaPlugins.onSubscribe(this, observer);
                               
                            Observable  =   this 
                            
                                public static <T> Observer<? super T> onSubscribe(
                                @NonNull Observable<T> source,
                                @NonNull Observer<? super T> observer) {
                                     return apply(f, source, observer);
                                     
                                         static <T, U, R> R apply(@NonNull BiFunction<T, U, R> f,
                                         @NonNull T t, @NonNull U u) {
                                            return f.apply(t, u);
                            
                            
                                static volatile BiFunction<? super Observable, 
                                    ? super Observer, ? extends Observer> onObservableSubscribe;
                            
                            public interface BiFunction<T1, T2, R> {
                            
                               R apply(@NonNull T1 t1, @NonNull T2 t2) throws Exception;
                            
                            
                              @Override
                public Object apply(Integer a, Integer b) throws Exception {
                    return a + b;
                }
                
                
                            
                            
                            
                    @CheckReturnValue
    @NonNull
    @SchedulerSupport(SchedulerSupport.NONE)
    public static <T> Observable<T> create(ObservableOnSubscribe<T> source) {            
                            
            return RxJavaPlugins.onAssembly(new ObservableCreate<T>(source));
            
                            
                        public ObservableCreate(ObservableOnSubscribe<T> source) {
        this.source = source;
    }        
                public static <T> Observable<T> onAssembly(@NonNull Observable<T> source) {

                    static volatile Function<? super Observable, ? extends Observable> onObservableAssembly;
                            
                            
                        public interface Function<T, R> {    
                            
                            R apply(@NonNull T t) throws Exception;
                            
                            
                             Function<? super Observable, ? extends Observable> f = onObservableAssembly;
        if (f != null) {
            return apply(f, source);
        }
        return source;
        
        
                            
                //3,被觀察者訂閱觀察者
        observable.subscribe(observer);
    public final void subscribe(Observer<? super T> observer) {
    
            Observable = this;
            
          observer = RxJavaPlugins.onSubscribe(this, observer);    
                            
            public static <T> Observer<? super T> onSubscribe(@NonNull Observable<T> source, @NonNull Observer<? super T> observer) {
        BiFunction<? super Observable, ? super Observer, ? extends Observer> f = onObservableSubscribe;
        if (f != null) {
            return apply(f, source, observer);
        }
        return observer;
    }                
            

            subscribeActual(observer);       
                            
                            

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章