Android RxJava框架基础知识(二)

参考学习视频:一堂课深度解读Rxjava,从零手写RxJava核心架构

Carson带你学Android:手把手带你入门神秘的Rxjava

RxJava之七——RxJava 2.0 图文分析create()、 subscribe()、map()、observeOn()、subscribeOn()源码

demo代码

导序

Rxjava对应的是观察者模式

观察者模式三要素:
1.事件订阅/ 关系确立 (被观察者 实例化的顺序)
2. 观察者上溯 (subscribe 往上传到)
3. 事件响应/事件通知 (观察者一个一个往下回调)

链式调度流程如下图所示:(观察者与被观察者是N:N
在这里插入图片描述
其中:
事件订阅流程:①–>②–>③
观察者上溯流程:④–>⑤–>⑥
事件响应流程:⑦–>⑧–>⑨
整个事件的流程为:①–>②–>③–>④–>⑤–>⑥–>⑦–>⑧–>⑨–>⑩

一、create操作符的使用

被观察者:Observable.java

/**
 * 被观察者
 * @param <T>
 */
public abstract class Observable<T> {

    //创建型操作 包装
    public static <T> Observable create(Observable<T> observable) {
        return observable;
    }

    //事件订阅
    public abstract void subscribe(Observer<T> observer);
}

观察者:Observer.java

/**
 * 观察者
 * @param <T>
 */
public interface Observer<T> {
    void onNext(T t);
    void onCompleted();
    void OnError(Throwable e);
}

UI调用层:MainActivity.java

package com.test.rxjavademo2;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;
import android.view.View;

public class MainActivity extends AppCompatActivity {
    private static final String TAG = "abc";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void click(View view) {
        Observable.create(new Observable<String>() {
            @Override
            public void subscribe(Observer<String> observer) {
                observer.onNext("hello world");
            }
        }).subscribe(new Observer() {

            @Override
            public void onCompleted() {

            }

            @Override
            public void OnError(Throwable throwable) {

            }

            @Override
            public void onNext(Object o) {
                Log.d(TAG, "观察者接收的数据为:" + o.toString());
            }
        });
    }
}

其实上面的代码流程中:
在这里插入图片描述

其中,create()方法就是将传入的参数进行了返回。

执行new Observable()方法进行创建被观察者:

  • 调用的subscribe(如上图中的1)对应调用如上图中的2的subscribe

  • 上图中①中的new Observer()会传给上图中②的参数observer

  • 执行上图中Ⅰ的observer.onNext()其实是调用上图中Ⅱ的onNext()方法。

上图的代码可以转换为:

public void click(View view) {
   Observable observable = Observable.create(new Observable<String>() {
        @Override
        public void subscribe(Observer<String> observer) {
            for (int i = 0; i < 10; i++) {
                observer.onNext("value = " + i);
            }
        }
    });
    observable.subscribe(new Observer<String>() {
        @Override
        public void onNext(String s) {
            Log.d(TAG, "观察者接收的数据" + s);
        }

        @Override
        public void onCompleted() {
        }

        @Override
        public void OnError(Throwable e) {

        }
    });
}

假如在被观察者类中添加一个flatMap接口方法:

package com.test.rxjavademo2;

import android.util.Log;

/**
 * 被观察者
 * @param <T>
 */
public abstract class Observable<T> {

    private static final String TAG = "abc";

    //创建型操作 包装
    public static <T> Observable create(Observable<T> observable) {
        return observable;
    }

    //事件订阅
    public abstract void subscribe(Observer<T> observer);

    public Observable<T> flatMap() {
        return new Observable<T>() {  //1
            @Override
            public void subscribe(Observer<T> observerC) {
                Observer<T> observerB = new Observer<T>() {
                    @Override
                    public void onNext(T t) {
                        Log.d(TAG, "observerC--onNext");
                        observerC.onNext(t);
                    }

                    @Override
                    public void onCompleted() {
                        observerC.onCompleted();
                    }

                    @Override
                    public void onError(Throwable e) {
                        observerC.onError(e);
                    }
                };
                // this.subscribe(observerC);  //这个this指的是1位置那行new Observable对象
                Log.d(TAG, "this=" + this + ", Observable.this=" + Observable.this);  //this=com.test.rxjavademo2.Observable$1@8bee5b5, Observable.this=com.test.rxjavademo2.MainActivity$2@243244a
                Observable.this.subscribe(observerB);  //这个 Observable.this指的是最外面即创建的Observable对象
            }
        };
    }
}

在MainActivity.java中调用该flatMap()方法

package com.test.rxjavademo2;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;
import android.view.View;

public class MainActivity extends AppCompatActivity {
    private static final String TAG = "abc";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void click(View view) {
        Observable.create(new Observable<String>() {
            @Override
            public void subscribe(Observer<String> observer) {
                Log.d(TAG, "Observable--onNext");
                for (int i = 0; i < 10; i++) {
                    observer.onNext("value = " + i);
                }
                observer.onCompleted();
            }
        }).flatMap().flatMap().flatMap().subscribe(new Observer<String>() {
            @Override
            public void onNext(String s) {
                Log.d(TAG, "观察者接收的数据" + s);
            }

            @Override
            public void onCompleted() {
                Log.d(TAG, "观察者接收完成");
            }

            @Override
            public void onError(Throwable e) {

            }
        });
    }
}

上面click方法可以拆解为:

public void click(View view) {
        Observable observable = Observable.create(new Observable<String>() {
            @Override
            public void subscribe(Observer<String> observer) {
                Log.d(TAG, "Observable--onNext");
                for (int i = 0; i < 10; i++) {
                    observer.onNext("value = " + i);
                }
                observer.onCompleted();
            }
        });
        Observable observable1 = observable.flatMap();
        Observable observable2 = observable1.flatMap();
        Observable observable3 = observable2.flatMap();
        observable3.subscribe(new Observer<String>() {  //最终监听结果
            @Override
            public void onNext(String s) {
                Log.d(TAG, "观察者接收的数据" + s);
            }

            @Override
            public void onCompleted() {
                Log.d(TAG, "观察者接收完成");
            }

            @Override
            public void onError(Throwable e) {

            }
        });
    }

log输出的结果:

2021-07-06 13:39:57.255 8294-8294/com.test.rxjavademo2 D/abc: this=com.test.rxjavademo2.Observable$1@1973b16, Observable.this=com.test.rxjavademo2.Observable$1@a690c97
2021-07-06 13:39:57.255 8294-8294/com.test.rxjavademo2 D/abc: this=com.test.rxjavademo2.Observable$1@a690c97, Observable.this=com.test.rxjavademo2.Observable$1@45a8e84
2021-07-06 13:39:57.256 8294-8294/com.test.rxjavademo2 D/abc: this=com.test.rxjavademo2.Observable$1@45a8e84, Observable.this=com.test.rxjavademo2.MainActivity$2@13166d
2021-07-06 13:39:57.256 8294-8294/com.test.rxjavademo2 D/abc: Observable--onNext
2021-07-06 13:39:57.257 8294-8294/com.test.rxjavademo2 D/abc: observerC--onNext
2021-07-06 13:39:57.257 8294-8294/com.test.rxjavademo2 D/abc: observerC--onNext
2021-07-06 13:39:57.257 8294-8294/com.test.rxjavademo2 D/abc: observerC--onNext
2021-07-06 13:39:57.257 8294-8294/com.test.rxjavademo2 D/abc: 观察者接收的数据value = 0
2021-07-06 13:39:57.257 8294-8294/com.test.rxjavademo2 D/abc: observerC--onNext
2021-07-06 13:39:57.257 8294-8294/com.test.rxjavademo2 D/abc: observerC--onNext
2021-07-06 13:39:57.257 8294-8294/com.test.rxjavademo2 D/abc: observerC--onNext
2021-07-06 13:39:57.257 8294-8294/com.test.rxjavademo2 D/abc: 观察者接收的数据value = 1
2021-07-06 13:39:57.257 8294-8294/com.test.rxjavademo2 D/abc: observerC--onNext
2021-07-06 13:39:57.257 8294-8294/com.test.rxjavademo2 D/abc: observerC--onNext
2021-07-06 13:39:57.257 8294-8294/com.test.rxjavademo2 D/abc: observerC--onNext
2021-07-06 13:39:57.257 8294-8294/com.test.rxjavademo2 D/abc: 观察者接收的数据value = 2
2021-07-06 13:39:57.257 8294-8294/com.test.rxjavademo2 D/abc: observerC--onNext
2021-07-06 13:39:57.257 8294-8294/com.test.rxjavademo2 D/abc: observerC--onNext
2021-07-06 13:39:57.257 8294-8294/com.test.rxjavademo2 D/abc: observerC--onNext
2021-07-06 13:39:57.257 8294-8294/com.test.rxjavademo2 D/abc: 观察者接收的数据value = 3
2021-07-06 13:39:57.257 8294-8294/com.test.rxjavademo2 D/abc: observerC--onNext
2021-07-06 13:39:57.257 8294-8294/com.test.rxjavademo2 D/abc: observerC--onNext
2021-07-06 13:39:57.257 8294-8294/com.test.rxjavademo2 D/abc: observerC--onNext
2021-07-06 13:39:57.257 8294-8294/com.test.rxjavademo2 D/abc: 观察者接收的数据value = 4
2021-07-06 13:39:57.257 8294-8294/com.test.rxjavademo2 D/abc: observerC--onNext
2021-07-06 13:39:57.257 8294-8294/com.test.rxjavademo2 D/abc: observerC--onNext
2021-07-06 13:39:57.257 8294-8294/com.test.rxjavademo2 D/abc: observerC--onNext
2021-07-06 13:39:57.257 8294-8294/com.test.rxjavademo2 D/abc: 观察者接收的数据value = 5
2021-07-06 13:39:57.257 8294-8294/com.test.rxjavademo2 D/abc: observerC--onNext
2021-07-06 13:39:57.257 8294-8294/com.test.rxjavademo2 D/abc: observerC--onNext
2021-07-06 13:39:57.257 8294-8294/com.test.rxjavademo2 D/abc: observerC--onNext
2021-07-06 13:39:57.258 8294-8294/com.test.rxjavademo2 D/abc: 观察者接收的数据value = 6
2021-07-06 13:39:57.258 8294-8294/com.test.rxjavademo2 D/abc: observerC--onNext
2021-07-06 13:39:57.258 8294-8294/com.test.rxjavademo2 D/abc: observerC--onNext
2021-07-06 13:39:57.258 8294-8294/com.test.rxjavademo2 D/abc: observerC--onNext
2021-07-06 13:39:57.258 8294-8294/com.test.rxjavademo2 D/abc: 观察者接收的数据value = 7
2021-07-06 13:39:57.258 8294-8294/com.test.rxjavademo2 D/abc: observerC--onNext
2021-07-06 13:39:57.258 8294-8294/com.test.rxjavademo2 D/abc: observerC--onNext
2021-07-06 13:39:57.258 8294-8294/com.test.rxjavademo2 D/abc: observerC--onNext
2021-07-06 13:39:57.258 8294-8294/com.test.rxjavademo2 D/abc: 观察者接收的数据value = 8
2021-07-06 13:39:57.258 8294-8294/com.test.rxjavademo2 D/abc: observerC--onNext
2021-07-06 13:39:57.258 8294-8294/com.test.rxjavademo2 D/abc: observerC--onNext
2021-07-06 13:39:57.258 8294-8294/com.test.rxjavademo2 D/abc: observerC--onNext
2021-07-06 13:39:57.258 8294-8294/com.test.rxjavademo2 D/abc: 观察者接收的数据value = 9
2021-07-06 13:39:57.258 8294-8294/com.test.rxjavademo2 D/abc: 观察者接收完成


二、map操作符的使用

添加一个转换函数Function.java

package com.test.rxjavademo2;

/**
 * 转换操作符 比如:将url转换为Bitmap
 */
public interface Function<T, R> {
    R apply(T t);
}

在被观察者Observable.java中添加map()方法:

public <R> Observable<R> map(final Function<T, R> function) {
   return new Observable<R>() {
       @Override
       public void subscribe(Observer<R> observerC) {
           Observer<T> observerB = new Observer<T>() {
               @Override
               public void onNext(T t) {
                   R r = function.apply(t);  //该操作发生在事件回调流程中
                   Log.d(TAG, "observerC--onNext  t=" + t + ", r=" + r);  //输出log:observerC--onNext  t=http://baidu.com/1.png, r=android.graphics.Bitmap@f35a625
                   observerC.onNext(r);
               }

               @Override
               public void onCompleted() {
                   observerC.onCompleted();
               }

               @Override
               public void onError(Throwable e) {
                   observerC.onError(e);
               }
           };
           Observable.this.subscribe(observerB);
       }
   };
}

在MainActivity.java中进行调用:

public void map(View view) {
      Observable.create(new Observable<String>() {
          @Override
          public void subscribe(Observer<String> observer) {
              observer.onNext("http://baidu.com/1.png");
              observer.onCompleted();
          }
      }).map(new Function<String, Bitmap>() {
          @Override
          public Bitmap apply(String url) {
              Log.d(TAG, "开始下载文件:" + url);
              Bitmap bitmap = downLoad(url);
              Log.d(TAG, "下载图片成功: " + bitmap);
              return bitmap;
          }
      }).subscribe(new Observer<Bitmap>() {
          @Override
          public void onNext(Bitmap bitmap) {
              Log.d(TAG, "回调应用层 通知观察者: " + bitmap.toString());
          }

          @Override
          public void onCompleted() {
              Log.d(TAG, "回调应用层 下载完成");
          }

          @Override
          public void onError(Throwable e) {

          }
      });
}

private Bitmap downLoad(String url) {
    return BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher);
}

输出结果:

2021-07-06 14:41:11.033 9280-9280/com.test.rxjavademo2 D/abc: 开始下载文件:http://baidu.com/1.png
2021-07-06 14:41:11.036 9280-9280/com.test.rxjavademo2 D/abc: 下载图片成功: android.graphics.Bitmap@f35a625
2021-07-06 14:41:11.036 9280-9280/com.test.rxjavademo2 D/abc: observerC--onNext  t=http://baidu.com/1.png, r=android.graphics.Bitmap@f35a625
2021-07-06 14:41:11.036 9280-9280/com.test.rxjavademo2 D/abc: 回调应用层 通知观察者: android.graphics.Bitmap@f35a625
2021-07-06 14:41:11.036 9280-9280/com.test.rxjavademo2 D/abc: 回调应用层 下载完成

三、线程切换

在被观察者Observable.java中添加子线程切换接口方法subscribeOn()

package com.test.rxjavademo2;

import android.util.Log;

/**
 * 被观察者
 * @param <T>
 */
public abstract class Observable<T> {

    private static final String TAG = "abc";

    //创建型操作 包装
    public static <T> Observable create(Observable<T> observable) {
        return observable;
    }

    //事件订阅
    public abstract void subscribe(Observer<T> observer);

    public Observable<T> flatMap() {
        return new Observable<T>() {  //1
            @Override
            public void subscribe(Observer<T> observerC) {
                Observer<T> observerB = new Observer<T>() {
                    @Override
                    public void onNext(T t) {
                        Log.d(TAG, "observerC--onNext");
                        observerC.onNext(t);
                    }

                    @Override
                    public void onCompleted() {
                        observerC.onCompleted();
                    }

                    @Override
                    public void onError(Throwable e) {
                        observerC.onError(e);
                    }
                };
                // this.subscribe(observerC);  //这个this指的是1位置那行new Observable对象
                Log.d(TAG, "this=" + this + ", Observable.this=" + Observable.this);  //this=com.test.rxjavademo2.Observable$1@8bee5b5, Observable.this=com.test.rxjavademo2.MainActivity$2@243244a
                Observable.this.subscribe(observerB);  //这个 Observable.this指的是最外面即创建的Observable对象
            }
        };
    }


    public <R> Observable<R> map(final Function<T, R> function) {
        return new Observable<R>() {
            @Override
            public void subscribe(Observer<R> observerC) {
                Observer<T> observerB = new Observer<T>() {
                    @Override
                    public void onNext(T t) {
                        R r = function.apply(t);  //该操作发生在事件回调流程中
                        Log.d(TAG, "observerC--onNext  t=" + t + ", r=" + r);  //输出log:observerC--onNext  t=http://baidu.com/1.png, r=android.graphics.Bitmap@f35a625
                        observerC.onNext(r);
                    }

                    @Override
                    public void onCompleted() {
                        observerC.onCompleted();
                    }

                    @Override
                    public void onError(Throwable e) {
                        observerC.onError(e);
                    }
                };
                Observable.this.subscribe(observerB);
            }
        };
    }

    public Observable subscribeOn() {
        return new Observable<T>() {
            @Override
            public void subscribe(Observer<T> observer) {  //发生在观察者上溯流程中
                new Thread(){
                    @Override
                    public void run() {
                        Observer<T> observerB = new Observer<T>() {
                            @Override
                            public void onNext(T t) {
                                Log.d(TAG, "subscribeOn--onNext");
                                observer.onNext(t);
                            }

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

                            @Override
                            public void onError(Throwable e) {
                                observer.onError(e);
                            }
                        };
                        Observable.this.subscribe(observerB);
                    }
                }.start();
            }
        };
    }
}

特别注意:切换到子线程操作,需要将subscribe()里面的操作执行在子线程中,即子线程发生在观察者回溯流程中
MainActivity.java

package com.test.rxjavademo2;

import androidx.appcompat.app.AppCompatActivity;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.util.Log;
import android.view.View;

public class MainActivity extends AppCompatActivity {
    private static final String TAG = "abc";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void create(View view) {
        Observable.create(new Observable<String>() {
            @Override
            public void subscribe(Observer<String> observer) {
                Log.d(TAG, "Observable--onNext");
                for (int i = 0; i < 10; i++) {
                    observer.onNext("value = " + i);
                }
                observer.onCompleted();
            }
        }).flatMap().subscribe(new Observer<String>() {  //最终监听结果
            @Override
            public void onNext(String s) {
                Log.d(TAG, "观察者接收的数据" + s);
            }

            @Override
            public void onCompleted() {
                Log.d(TAG, "观察者接收完成");
            }

            @Override
            public void onError(Throwable e) {

            }
        });
    }


    public void map(View view) {
          Observable.create(new Observable<String>() {
              @Override
              public void subscribe(Observer<String> observer) {
                  observer.onNext("http://baidu.com/1.png");
                  observer.onCompleted();
              }
          }).map(new Function<String, Bitmap>() {
              @Override
              public Bitmap apply(String url) {
                  Log.d(TAG, "开始下载文件:" + url);
                  Bitmap bitmap = downLoad(url);
                  Log.d(TAG, "下载图片成功: " + bitmap);
                  return bitmap;
              }
          }).subscribe(new Observer<Bitmap>() {
              @Override
              public void onNext(Bitmap bitmap) {
                  Log.d(TAG, "回调应用层 通知观察者: " + bitmap.toString());
              }

              @Override
              public void onCompleted() {
                  Log.d(TAG, "回调应用层 下载完成");
              }

              @Override
              public void onError(Throwable e) {

              }
          });
    }

    private Bitmap downLoad(String url) {
        return BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher);
    }

    public void thread(View view) {
        Observable.create(new Observable<String>() {
            @Override
            public void subscribe(Observer<String> observer) {
                Log.d(TAG, "Observable--onNext");
                observer.onNext("http://baidu.com/1.png");
                observer.onCompleted();
                Log.d(TAG, "被观察者:" + Thread.currentThread().getName());
            }
        }).map(new Function<String, Bitmap>() {

            @Override
            public Bitmap apply(String url) {
                Log.d(TAG, "开始下载文件:" + url);
                Bitmap bitmap = downLoad(url);
                Log.d(TAG, "下载图片成功: " + bitmap);
                return bitmap;
            }
        }).subscribeOn().subscribe(new Observer<Bitmap>() {
            @Override
            public void onNext(Bitmap bitmap) {
                Log.d(TAG, "回调应用层 通知观察者: " + bitmap.toString());
                Log.d(TAG, "观察者:" + Thread.currentThread().getName());
            }

            @Override
            public void onCompleted() {

            }

            @Override
            public void onError(Throwable e) {

            }
        });
    }
}

输出结果为:

2021-07-06 16:08:18.923 10889-10931/com.test.rxjavademo2 D/abc: Observable--onNext
2021-07-06 16:08:18.923 10889-10931/com.test.rxjavademo2 D/abc: 开始下载文件:http://baidu.com/1.png
2021-07-06 16:08:18.927 10889-10931/com.test.rxjavademo2 D/abc: 下载图片成功: android.graphics.Bitmap@4d3524c
2021-07-06 16:08:18.927 10889-10931/com.test.rxjavademo2 D/abc: observerC--onNext  t=http://baidu.com/1.png, r=android.graphics.Bitmap@4d3524c
2021-07-06 16:08:18.927 10889-10931/com.test.rxjavademo2 D/abc: subscribeOn--onNext
2021-07-06 16:08:18.927 10889-10931/com.test.rxjavademo2 D/abc: 回调应用层 通知观察者: android.graphics.Bitmap@4d3524c
2021-07-06 16:08:18.927 10889-10931/com.test.rxjavademo2 D/abc: 观察者:Thread-2
2021-07-06 16:08:18.928 10889-10931/com.test.rxjavademo2 D/abc: 被观察者:Thread-2

如果将最后的观察者设置到主线程中执行:
特别注意:切换到主线程操作,应该发生中事件响应流程中
在被观察者Observable.java中添加observeOn()接口

Handler handler = new Handler(Looper.getMainLooper());
// 切换到主线程
public Observable observeOn() {
    return new Observable<T>() {
        @Override
        public void subscribe(Observer<T> observer) {
            Observer<T> observerB = new Observer<T>() {
                @Override
                public void onNext(T t) {
                    handler.post(new Runnable() {
                        @Override
                        public void run() {
                            observer.onNext(t);
                        }
                    });
                }

                @Override
                public void onCompleted() {
                    handler.post(new Runnable() {
                        @Override
                        public void run() {
                            observer.onCompleted();
                        }
                    });
                }

                @Override
                public void onError(Throwable e) {
                    handler.post(new Runnable() {
                        @Override
                        public void run() {
                            observer.onError(e);
                        }
                    });
                }
            };
            Observable.this.subscribe(observerB);
        }
    };
}

在MainActivity调用改为为:

public void thread(View view) {
    Observable.create(new Observable<String>() {
        @Override
        public void subscribe(Observer<String> observer) {
            Log.d(TAG, "Observable--onNext");
            observer.onNext("http://baidu.com/1.png");
            observer.onCompleted();
            Log.d(TAG, "被观察者:" + Thread.currentThread().getName());
        }
    }).map(new Function<String, Bitmap>() {

        @Override
        public Bitmap apply(String url) {
            Log.d(TAG, "开始下载文件:" + url);
            Bitmap bitmap = downLoad(url);
            Log.d(TAG, "下载图片成功: " + bitmap);
            return bitmap;
        }
    }).subscribeOn().observeOn().subscribe(new Observer<Bitmap>() {
        @Override
        public void onNext(Bitmap bitmap) {
            Log.d(TAG, "回调应用层 通知观察者: " + bitmap.toString());
            Log.d(TAG, "观察者:" + Thread.currentThread().getName());
        }

        @Override
        public void onCompleted() {

        }

        @Override
        public void onError(Throwable e) {

        }
    });
}

执行结果:

2021-07-06 16:25:11.124 11182-11221/com.test.rxjavademo2 D/abc: Observable--onNext
2021-07-06 16:25:11.124 11182-11221/com.test.rxjavademo2 D/abc: 开始下载文件:http://baidu.com/1.png
2021-07-06 16:25:11.128 11182-11221/com.test.rxjavademo2 D/abc: 下载图片成功: android.graphics.Bitmap@3d56295
2021-07-06 16:25:11.128 11182-11221/com.test.rxjavademo2 D/abc: observerC--onNext  t=http://baidu.com/1.png, r=android.graphics.Bitmap@3d56295
2021-07-06 16:25:11.128 11182-11221/com.test.rxjavademo2 D/abc: subscribeOn--onNext
2021-07-06 16:25:11.128 11182-11221/com.test.rxjavademo2 D/abc: 被观察者:Thread-2
2021-07-06 16:25:11.132 11182-11182/com.test.rxjavademo2 D/abc: 回调应用层 通知观察者: android.graphics.Bitmap@3d56295
2021-07-06 16:25:11.132 11182-11182/com.test.rxjavademo2 D/abc: 观察者:main

备注:

  • subscribeOn是通过新建Observable的方式,使用OnSubscribe类的方式去做到线程切换的
    subscribeOn()的位置放在哪里都可以,但它是只能调用一次,原因就是subscribeOn是通过新建Onservable的方式

  • observeOn是通过operator操作符的形式去完成线程切换的,所以它的作用域和其他操作符一样,是调用observeOn之后的链路
    observeOn()指定的是它之后的操作所在的线程,通过observeOn()的多次调用,程序实现了线程的多次切换

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值