RxJava二线程控制

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Observable<Integer> observable = Observable.create(new ObservableOnSubscribe<Integer>() {
        @Override
        public void subscribe(ObservableEmitter<Integer> emitter) throws Exception {
            Log.d(TAG, "Observable thread is : " + Thread.currentThread().getName());
            Log.d(TAG, "emit 1");
            emitter.onNext(1);
        }
    });

    Consumer<Integer> consumer = new Consumer<Integer>() {
        @Override
        public void accept(Integer integer) throws Exception {
            Log.d(TAG, "Observer thread is :" + Thread.currentThread().getName());
            Log.d(TAG, "onNext: " + integer);
        }
    };

    observable.subscribeOn(Schedulers.newThread())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(consumer);
}

 D/MainActivity: Observable thread is : RxNewThreadScheduler-2 
 D/MainActivity: emit1 
D/MainActivity: Observer thread is :main 
 D/MainActivity: onNext:1
//subscribeOn() 指定的是发送事件的线程, observeOn() 指定的是接收事件的线程.每调用一次observeOn() 线程便会切换一次,
多次调用subscribeOn() 只有第一次的有效, 其余的会被忽略.

举个例子:

 observable.subscribeOn(Schedulers.newThread())     
         .subscribeOn(Schedulers.io())              
         .observeOn(AndroidSchedulers.mainThread()) 
         .observeOn(Schedulers.io())                
         .subscribe(consumer);
  • Schedulers.io() 代表io操作的线程, 通常用于网络,读写文件等io密集型的操作
  • Schedulers.computation() 代表CPU计算密集型的操作, 例如需要大量计算的操作
  • Schedulers.newThread() 代表一个常规的新线程
  • AndroidSchedulers.mainThread() 代表Android的主线程


public class MainActivity extends AppCompatActivity {
//Schedulers.io() 代表io操作的线程, 通常用于网络,读写文件等io密集型的操作
//Schedulers.computation() 代表CPU计算密集型的操作, 例如需要大量计算的操作
//Schedulers.newThread() 代表一个常规的新线程
//AndroidSchedulers.mainThread() 代表Android的主线程


    private String TAG="MainActivity";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        Observable.create(new ObservableOnSubscribe<Integer>() {
            @Override
            public void subscribe(ObservableEmitter<Integer> e) throws Exception {
                e.onNext(1);

                e.onComplete();
                Log.e(TAG, "Observable thread is : " + Thread.currentThread().getName());
            }//subscribeOn() 指定的是发送事件的线程, observeOn() 指定的是接收事件的线程.每调用一次observeOn() 线程便会切换一次,
        }) .subscribeOn(Schedulers.newThread()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer<Integer>() {
            @Override
            public void onSubscribe(Disposable d) {

                Log.e(TAG,"onSubscribe");
            }

            @Override
            public void onNext(Integer value) {
                Log.e(TAG,"value:--"+value);
                Log.e(TAG, "Observer thread is :" + Thread.currentThread().getName());
            }

            @Override
            public void onError(Throwable e) {
                Log.e(TAG,"onError");
            }

            @Override
            public void onComplete() {
                Log.e(TAG,"onComplete");
            }
        });




    }
}


08-08 04:59:27.893 1727-1727/chzy.org.rxjava E/MainActivity: onSubscribe
08-08 04:59:27.903 1727-1746/chzy.org.rxjava E/MainActivity: Observable thread is : RxNewThreadScheduler-1
08-08 04:59:28.123 1727-1727/chzy.org.rxjava E/MainActivity: value:--1
08-08 04:59:28.123 1727-1727/chzy.org.rxjava E/MainActivity: Observer thread is :main
08-08 04:59:28.123 1727-1727/chzy.org.rxjava E/MainActivity: onComplete


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值