Rxjava个人摘抄笔记

原文出处

原文

RxJava

1.观察者 observer

普通控件的观察者:

button    -> onclicklistener -> setonclicklistener -> onclick
 被观察者   ->       观察者    ->       订阅关系      -> 执行事件

RxJava观察者:

observable -> observer -> subscribe ->  onnext/oncompleted/onerror
被观察者     ->   观察者  -> 订阅关系   ->   执行事件

2.Observer / Subscribe

  1. 两者用法几乎一样

  2. 主要区别

    subscribe有两个多的实现接口:
    	onStart
    					事件未发送前调用;
    					不能执行更新UI操作
    	unSubscribe
    				   取消订阅
    

3.被观察者 observable

  1. 创建事件
    1. observable.create(new)
    2. observable.just(args,args)
    3. observable.form(arr[])

4.线程切换一 scheduler

  1. 线程切换

    1. 指定每一段代码应该运行在什么什么样的线程上
    schedulers.immediate当前线程
    schedulers.newthread新线程
    schedulers.io无线线程池(不要有计算工作)
    schedulers.computation计算线程
    Androidschedulers.mainthread主线程
    

    subscribeon()指定发生的线程

    observeon指定消费的线程

    Observable.just(1, 2, 3, 4)
        .subscribeOn(Schedulers.io()) // 指定 subscribe() 发生在 IO 线程
        .observeOn(AndroidSchedulers.mainThread()) // 指定 Subscriber 的回调发生在主线程
        .subscribe(new Action1<Integer>() {
            @Override
            public void call(Integer number) {
                Log.d(tag, "number:" + number);
            }
        });
    

5.不完整定义‘订阅’关系

  1. action0
    1. 定义oncompleted
  2. action1
    1. 定义onnext
    2. 定义onerroe

使用

Action1<String> onNextAction = new Action1<String>() {
    // onNext()
    @Override
    public void call(String s) {
        Log.d(tag, s);
    }
};
Action1<Throwable> onErrorAction = new Action1<Throwable>() {
    // onError()
    @Override
    public void call(Throwable throwable) {
        // Error handling
    }
};
Action0 onCompletedAction = new Action0() {
    // onCompleted()
    @Override
    public void call() {
        Log.d(tag, "completed");
    }
};

// 自动创建 Subscriber ,并使用 onNextAction 来定义 onNext()
observable.subscribe(onNextAction);
// 自动创建 Subscriber ,并使用 onNextAction 和 onErrorAction 来定义 onNext() 和 onError()
observable.subscribe(onNextAction, onErrorAction);
// 自动创建 Subscriber ,并使用 onNextAction、 onErrorAction 和 onCompletedAction 来定义 onNext()、 onError() 和 onCompleted()
observable.subscribe(onNextAction, onErrorAction, onCompletedAction);

6.事件变换

  1. funx

    1. 类似于action
    2. 是有返回值的
    3. 配合map使用

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2JmtbBL2-1575297141406)(C:\Users\Primer4\Documents\学习笔记\1575295612762.png)]

  2. map 一对一

  3. flatmap 一对多

  4. lift变换

  5. compose整体变换

7.线程切换二

  1. 多次切换线程

多次调用observeon,之后的操作就是切换到的线程上

subscribeon只能调用一次,放在任何位置都可以,当被多次调用时候,只有第一个起作用

Observable.just(1, 2, 3, 4) // IO 线程,由 subscribeOn() 指定
    .subscribeOn(Schedulers.io())
    .observeOn(Schedulers.newThread())
    .map(mapOperator) // 新线程,由 observeOn() 指定
    .observeOn(Schedulers.io())
    .map(mapOperator2) // IO 线程,由 observeOn() 指定
    .observeOn(AndroidSchedulers.mainThread) 
    .subscribe(subscriber);  // Android 主线程,由 observeOn() 指定
  1. doonsubscribe

  2. 和onstart方法一样,在subscribe调用后,事件发送前执行

  3. doonsubcriber的区别是可以指定线程

  4. doonsubscribe执行在里subscribeon最近的线程

发布了89 篇原创文章 · 获赞 13 · 访问量 7721

猜你喜欢

转载自blog.csdn.net/printf123scanf/article/details/103358589