RxJava线程控制

 RxJava中的线程转换主要经过下面两个方法:app

1.subscribeOnspa

2.observeOn线程

1、subscribeOncode

1.调用一次subscribeOn时:server

Observable observable;
Schedulers schedulers;
Observer observer;
observable.subscribeOn(schedulers).subscribe(observer)

经过解析源码可转化为:blog

observer.onSubscribe();
schedulers线程{
       observable.subscribe(observer)
}

在原线程调用observer的onSubscribe 方法,并在schedulers的线程中调用observable 的subscribe 方法。源码

 

2.当屡次调用subscribeOn时:io

Observable observable;
Schedulers schedulers1;
Schedulers schedulers2;
Observer observer;
observable.subscribeOn(schedulers1)
     .subscribeOn(schedulers2)
     .subscribe(observer)

可转化为:function

observer.onSubscribe();
schedulers2线程{
     schedulers1线程{
       observable.subscribe(observer)
     }
}

因此subscribOn只有第一次有效。class

2、observeOn

1.调用一次observeOn

Observable observable;
Schedulers schedulers;
Observer observer;
observable.observeOn(schedulers).subscribe(observer)

可转化为:

observer.onSubscribe();
schedulers线程{
       observer.next()
       observer.complete()
}

 

当屡次调用observeOn时:

Observable observable;
Schedulers schedulers1;
Schedulers schedulers2;
Observer observer;
observable.observeOn(schedulers1)
        .observeOn(schedulers2)
        .subscribe(observer)

可转化为:

observer.onSubscribe();
schedulers1线程{
     schedulers2线程{
          observer.next()
          observer.complete()
     }
}

 

当时用map操做符时:

observable.map()
     .observeOn(schedulers1)
     .map(function)
     .observeOn(schedulers2)
     .subscribe(observer)

可转化为:

observer.onSubscribe();
schedulers1线程{
    function.apply()
     schedulers2线程{
          observer.next()
          observer.complete()
     }
}
相关文章
相关标签/搜索