RxJava

一、基本使用三部曲

依赖:

compile 'io.reactivex.rxjava2:rxjava:2.0.0-RC5'
compile 'io.reactivex.rxjava2:rxandroid:2.0.0-RC1'

compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.retrofit2:converter-gson:2.1.0'

compile 'com.squareup.retrofit2:adapter-rxjava:2.0.2'

1、创建Observable

io.reactivex.Observable<String> observable= io.reactivex.Observable
        .create(new ObservableOnSubscribe<String>() {
    @Override
    public void subscribe(ObservableEmitter<String> e) throws Exception {
        e.onNext("hello");
        e.onNext("world");
        e.onComplete();
    }
});

2、创建Observer

Observer<String> observer=new Observer<String>() {
    @Override
    public void onSubscribe(Disposable d) {
        Log.d("TestRxJava", "onSubscribe: "+d.isDisposed());
    }

    @Override
    public void onNext(String value) {
        Log.d("TestRxJava", "onNext: "+value);
    }

    @Override
    public void onError(Throwable e) {
        Log.d("TestRxJava", "onError: "+e.getLocalizedMessage());
    }

    @Override
    public void onComplete() {
        Log.d("TestRxJava", "onComplete: ");
    }
};

3、订阅

observable.subscribe(observer);

简单写法

getObservable().subscribe(new Consumer<String>() {
    @Override
    public void accept(String s) throws Exception {
        txt1.append("accept:value:"+s);
        txt1.append(LINE_SEPARATOR);
    }
});

二、Scheduler线程控制

    Schedulers.immediate();直接在当前线程运行,相当于不指定线程。这是默认的Scheduler。

    Schedulers.newThread();总是启用新线程,并在新线程执行操作。

    Schedulers.io();I/O操作(读写文件、读写数据库、网络信息交互等)所使用的Scheduler。行为模式和newThread()差不多,区别在于io()的内部实现是用一个无数量上限的线程池,可以重用空闲的线程,因此多数情况下io()比newThread()更有效率。不要把计算工作放在io()中,可以避免创建不必要的线程。

    Schedulers.computation();计算所使用的Scheduler。这个计算指的是CPU密集型计算,即不会被I/O等操作限制性能的操作,例如图形的计算。这个Scheduler使用的固定的线程池,大小为CPU核数。不要把I/O操作放在computation()中,否则I/O操作的等待时间会浪费CPU。

    AndroidSchedulers.mainThread();它指定的操作将在Android主线程运行

例如:

 Observable.create(new ObservableOnSubscribe<User>() {
            @Override
            //主线程执行
            public void subscribe(ObservableEmitter<User> emitter) throws Exception {

                User user=api.getUserInfo(1).execute().body();

//                User user = new User("1", "cniao5.com");

                emitter.onNext(user);
            }
        }).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<User>() {
            @Override
            public void onSubscribe(Disposable d) {

            }

            @Override
            public void onNext(User user) {
                Log.d("MainActivity", "onNext: " + user);
                txt1.setText(user.getUsername());
            }

            @Override
            public void onError(Throwable e) {
                e.printStackTrace();
            }

            @Override
            public void onComplete() {
               
            }
        });

observeOn()指定Observer线程;
subscribeOn()指定Observable线程;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值