RxAndroid,一段简单的代码

 先看如下一段代码:

public class RxAndroidTest {
    private static final String TAG = "RxAndroidTest";

    public static void test() {
        final int[] array = { 1, 3, 5, 7, 9 };
        final Disposable disposable = Observable.create(new ObservableOnSubscribe<String>() {
            @Override
            public void subscribe(@NonNull ObservableEmitter<String> e) {
                for (int i : array) {
                    // 跳出循环
                    if (e.isDisposed())
                        break;
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e1) {
                        //
                    }
                    e.onNext(String.valueOf(i));
                    Log.d(TAG, "subscribe " + i);
                }
                // 通知操作结束
                e.onComplete();
            }
        }).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Consumer<String>() {
                    @Override
                    public void accept(String s) {
                        Log.d(TAG, s);
                    }
                }, new Consumer<Throwable>() {
                    @Override
                    public void accept(Throwable throwable) {
                        Log.d(TAG, "onError");
                    }
                }, new Action() {
                    @Override
                    public void run() {
                        // 若不指定observeOn,则与observable在同一线程
                        Log.d(TAG, "onComplete");
                    }
                });

        final Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                // 调用dispose后,observable.subscribe仍然会执行
                // 但是observer不会执行onNext或onError或onComplete
                disposable.dispose();
            }
        }, 3000);
    }

}

分析:

1,Observable的常用构造可以使用Observable.create或Observable.fromCallable。 

2,subscribeon指定Observable执行线程,一般指定Schedulers.io()即可,内部会使用线程池执行任务。observeon指定Observer运行线程,AndroidSchedulers.mainThread()表示安卓UI线程。

3,subscribe可以指定多个参数,分别关注onNext,onComplete,onError。

4,ObservableOnSubscribe.subscribe中,e.onNext后会触发Consumer.accept,e.onComplete会触发Action.run。

5,Observable返回的Disposable.dispose后,那么,从Observable到Observer之间的连接中断,Observable仍旧会运行,但Observer得不到结果。

6,在Observable内部运行时检测状态,发现isDisposed后跳出循环。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值