RxAndroid--Part1

RxAndroid Demo https://github.com/klnusbaum/rxandroidexamples


第一部分介绍如何利用RxJava异步加载。第二部分介绍一些高级使用方法。
RxJava,主要有2个模型,Observables 和 Observers,基于监听者的设计模式思想,前者是事件发布者,后者是事件订阅者(通过subsribe方法订阅事件)。(此处不再深入讲解RxJava)
订阅者主要有3个方法:onNext onError onCompleted.

Observable<List<String>> listObservable = Observable.just(getColorList());

listObservable.subscribe(new Observer<List<String>>() { 

    @Override 
    public void onCompleted() { } 

    @Override 
    public void onError(Throwable e) { } 

    @Override
    public void onNext(List<String> colors) {
        mSimpleStringAdapter.setStrings(colors);
    }
});

异步加载:

Observable<List<String>> tvShowObservable = Observable.fromCallable(new Callable<List<String>>() { 

    @Override 
    public List<String> call() { 
        return mRestClient.getFavoriteTvShows(); 
    }
});

之前我们用just来创建,这是阻塞的方法,会在UI线程中直接执行,而使用Observable.fromCallable方法有2点不同:
1.在工作线程中执行
2.事件发射的值不会立马创建,直到有一个订阅者subscribe.
mTvShowSubscription = tvShowObservable
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe(new Observer<List<String>>() {
        
        @Override 
        public void onCompleted() { }
        
        @Override 
        public void onError(Throwable e) { }

        @Override 
        public void onNext(List<String> tvShows){
            displayTvShows(tvShows);
        }
    });

此处表示getFavoriteTvShows方法将在工作线程中执行。在一个Schedulers.io的线程中执行,那么当我们拿到了值需要在UI线程中渲染,如果在工作线程中显然不可以,这个时候observeOn(AndroidSchedulers.mainThread)起到了作用,它使得我们onNext中的代码在UI mainThread中执行。
当我们拥有很多订阅者的时候,要关注一个事情,比如页面被释放了,然而还有未处理完的订阅者怎么办?
if (mTvShowSubscription != null && !mTvShowSubscription.isUnsubscribed()) {
    mTvShowSubscription.unsubscribe();
}
unsubscribe表示我们不在订阅该事件。 通常这样的代码可能写在onDestory.
让我们来做个总结:
1.Observable.fromCallback方法延迟创建Observable要发送的值。
2.subscribeOn方法允许你指定创建发送值的过程在你指定的线程中。
3.observeOn方法允许你指定观察发送值的过程在你指定的线程中,通常在UI mainThread.










评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值