RxJava基础

Rx是响应式编程的意思,本质是观察者模式,以观察者(observe)和订阅者(subscribe)为基础的异步响应式开发。观察者模式(Observer)完美的将观察者和被观察的对象分离开。举个例子,用户界面可以作为一个观察者,业务数据是被观察者,用户界面观察业务数据的变化,发现数据变化后,就显示在界面上。RxJava最重要的两个名词是Observables(被观察者,事件源)和Subscribers(观察者)。Observables发出一系列事件,Subscribers处理这些事件

Observable:在观察者模式中称为“被观察者; Observer:观察者模式中的“观察者”,可接收Observable发送的数据;
subscribe:订阅,观察者与被观察者,通过subscribe()方法进行订阅; Subscriber:也是一种观察者,在2.0中
它与Observer没什么实质的区别,不同的是
Subscriber要与Flowable(也是一种被观察者)联合使用,该部分内容是2.0新增的,后续文章再介绍。Obsesrver用于订阅Observable,而Subscriber用于订阅Flowable
subscribeOn(): 指定Observable(被观察者)所在的线程,或者叫做事件产生的线程。 * observeOn(): 指定 Observer(观察者)所运行在的线程,或者叫做事件消费的线程。

  • 添加依赖

compile “io.reactivex.rxjava2:rxjava:2.1.1”

注意:如果需要使用java8的一些新特性,请参考这篇文章配置点击进入

  • Hello GJH
public class MainActivity extends AppCompatActivity {
    private TextView tv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv= (TextView) findViewById(R.id.tv);
        Observable<String> observable=Observable.create(new ObservableOnSubscribe<String>() {
            @Override
            public void subscribe(@NonNull ObservableEmitter<String> e) throws Exception {
                //逻辑处理
                //。。。
                //通知观察者
                e.onNext("Hello GJH");
            }
        });
        Observer<String> observer=new Observer<String>() {
            @Override
            public void onSubscribe(@NonNull Disposable d) {
                Log.i("info","订阅成功");
            }

            @Override
            public void onNext(@NonNull String s) {
                tv.setText(s);
                Log.i("info","收到数据"+s);
            }

            @Override
            public void onError(@NonNull Throwable e) {
                Log.i("info","错误发生");
            }

            @Override
            public void onComplete() {
                Log.i("info","完成");
            }
        };
        //绑定
        observable.subscribe(observer);
    }
}
  • 第二种写法(兰姆达表达式)
   Observable.just("Hello GJH").subscribe(s->{
                tv.setText(s);
        });
  • 发送集合
  //每次发送一条消息 相当于循环调用观察者的onNext
        List<String> list= Arrays.asList("gjh1","gjh2","gjh3","gjh4");
        Observable.fromIterable(list).subscribe(s->{
            //gjh1
            //gjh2
            //gjh3
            //gjh4
            tv.setText(s);
        });
   // 发送整数序列 第一个参数代表发送的起始值 第二个参数代表发送的次数(相当于调用了十五次onNext) 发送的值为5 6 7 .。。。19
        Observable.range(5,15).subscribe(s->{
            tv.setText(s.toString());
        });
 /*当观察者订阅时,才创建Observable,并且针对每个观察者创建都是一个新的Observable。
        以何种方式创建这个Observable对象,当满足回调条件后,就会进行相应的回调
         */
Observable<String> observable = Observable.defer(new Callable<ObservableSource<? extends String>>() {
            @Override
            public ObservableSource<? extends String> call() throws Exception {
                return Observable.just("hello");
            }
        });
  //发送整数序列 每隔三秒发送一次  0 1 2 3 4 .。。。。。。。。。。。。
        Observable.interval(3, TimeUnit.SECONDS).subscribe(s->{
            System.out.print(s);
        });
//延迟两秒发送
        Observable.timer(2, TimeUnit.SECONDS).subscribe(s->{
           });
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值