RxAndroid学习总结(二)

线程控制Scheduler

Scheduler的APl:

用于控制操作符和被观察者事件,所执行的线程。不同的调度器,对应不同的线程

调度器的分类:

Schedulers.immediate():默认线程

Schedulers.newThread():新建线程

Schedulers.io()︰适用于I/o操作(线程池)

Schedulers.computation():适用于计算工作(线程池)

Schedulers.trampoline():当前线程,队列执行

进行线程调度:

subscribeOn():指定subscribe()所发生的线程,即Observable.OnSubscribe被激活时所处的线程。或者叫做事件产生的线程。

observeOn():指定Subscriber所运行在的线程。或者叫做事件消费的线程。

/**
 * Schedulers的API
 */
public void test05(){
    Observable.from(getData())
            .subscribeOn(Schedulers.io())//指定所运行的线程(线程调度)
            .observeOn(AndroidSchedulers.mainThread())//指定observer的线程
            .subscribe(new Action1<Integer>() {
                @Override
                public void call(Integer integer) {
                    Log.d(TAG, "call: "+String.valueOf(integer));
                }
            });
}

private static List<Integer> getData(){
    List<Integer> list=new ArrayList<>();
    for (int i=0;i<10;i++){
        list.add(i);
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
    return list;
}

RxJava遵循的是线程不变的原则:

在哪调用subscribe(),就在哪个线程生产事件

在哪生产事件,就在哪个线程消费事件。

发表评论