• RxJava线程控制


    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);
            }
        });

    通过compose操作符完成线程切换

    public class SchedulerTransformer<T> implements Observable.Transformer<T, T> {
    
        @Override
        public Observable<T> call(Observable<T> observable) {
            return observable
                    .subscribeOn(Schedulers.io())
                    .observeOn(AndroidSchedulers.mainThread());
        }
    
        public static <T> SchedulerTransformer<T> create() {
            return new SchedulerTransformer<>();
        }
    }
    

     使用:

    Observable.just(1, 2, 3, 4)
        .compose(SchedulerTransformer.<Integer>create())  //一行代码实现线程切换
         .subscribe(new Action1<Integer>() { @Override public void call(Integer number) { Log.d(tag, "number:" + number); } });

    线程的自由切换

    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() 指定
     
    通过 observeOn() 的多次调用,程序实现了线程的多次切换。
    不同于 observeOn() , subscribeOn() 的位置放在哪里都可以,但它是只能调用一次的

    RxJava线程切换流程分析_observeOn

    Rxjava2源码浅析(二)

  • 相关阅读:
    第三方中间件 body-parser解析表单数据
    Express内置的中间件(express.json和express.urlencoded)格式的请求体数据
    用内置 querystring 模块解析请求体数据
    1108 低价购买
    1091 合唱队形
    1064 金明的预算方案
    1048 采药 & 1049 装箱问题
    1434 滑雪
    1443 马的遍历
    1141 01迷宫
  • 原文地址:https://www.cnblogs.com/huyang011/p/7648755.html
Copyright © 2020-2023  润新知