Rxjava 认识3


        /* Rxjava的异步执行 schedulers 使用

         被观察者调用subscribe()订阅观察者事件监听的时候 就产生了事件(事件产生源) 默认情况下
         事件在哪个线程产生 事件就在相应的线程消费 (同步概念)

         如果要指定的代码执行在不同的线程 就需要Scheduler 提供了很多静态方法。
         1 Schedulers.xxx 调用不同的静态方法 产生不同的线程
         2 特殊的 AndroidScheduler.mainThread()  运行主线程

          线程事件设置用被观察者的 SubscribOn() observeOn()方法
          SubscribOn() 参数指定线程(例如1中调用) 指定事件产生所在线程
          observeOn                            指定事件消费所在的线程
         */

         // 简单的使用Demo
        Observable.just(1,2,3,4)
                  .subscribeOn(Schedulers.io())//指定subscribe() 发生的线程
                  .observeOn(AndroidSchedulers.mainThread())// 指定回调(Subcriber)发生的线程
                  .subscribe(new Action1() {
                      @Override
                      public void call(Integer integer) {
                          Log.i(TAG, "call:事件的调度 "+integer);
                      }
                  });
        // 如上 1234 的发出 在子线程中执行    而打印的回调发生在主线程
        // 完整写法
        Subscriber subscriber1 = new Subscriber() {
            @Override
            public void onCompleted() {

            }

            @Override
            public void onError(Throwable throwable) {

            }

            @Override
            public void onNext(Integer integer) {
                Log.i(TAG, "onNext: "+integer);
            }
        };

        Observable observable1 = Observable.create(new Observable.OnSubscribe() {
            @Override
            public void call(Subscriber subscriber) {
                subscriber.onNext(1);
                subscriber.onNext(2);
                subscriber.onNext(3);
                subscriber.onNext(4);
            }

        });

        observable1.subscribeOn(Schedulers.io())//指定subscribe() 发生的线程
                   .observeOn(AndroidSchedulers.mainThread())// 指定回调(Subcriber)发生的线程
                    .subscribe(subscriber1);

Rxjava 认识3_第1张图片
image.png
 //修改上面加载图片的例子  让在主线程设置图片  子线程获取图片

        final int rec = R.mipmap.ic_launcher;
        final ImageView img = new ImageView(this);

        Observable.create(new Observable.OnSubscribe() {
            @Override
            public void call(Subscriber subscriber) {
                Drawable drawable = getResources().getDrawable(rec);
                subscriber.onNext(drawable);
            }
        }).subscribeOn(Schedulers.io())//指定subscribe() 发生的线程
                .observeOn(AndroidSchedulers.mainThread())// 指定回调(Subcriber)发生的线程
                .subscribe(new Observer() {
                    @Override
                    public void onCompleted() {

                    }

                    @Override
                    public void onError(Throwable throwable) {

                    }

                    @Override
                    public void onNext(Drawable drawable) {
                        img.setImageDrawable(drawable);
                    }
                });
        // 订阅事件 也就是Observable 发生在子线程   回调消费事件  也就观察者监听回调 发生在主线程

你可能感兴趣的:(Rxjava 认识3)