美文网首页
Android中Rxjava的简单使用

Android中Rxjava的简单使用

作者: 大崔弗 | 来源:发表于2019-01-22 17:09 被阅读0次

    本文参考抛物线大佬的给 Android 开发者的 RxJava 详解

    回调方法:可以看一下这个Android之回调函数 - 简书

    //安卓中常见的回调方法
    Button bt_add = (Button) findViewById(R.id.bt_add);
        bt_add.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
            }
        });
    

    onclick是回调方法,OnClickListener是回调接口
    在Activity里监听Button的点击事件onclick

    Rxjava的使用

    • 异步可以理解为多个线程可以同时对一个对象进行操作,无需等待
    • 同步就是线程不能同时对一个对象进行操作,需要等待
    • Rxjava就是基于异步的
    Observer(Subscriber):观察者

    Observer 即观察者,它决定事件触发的时候将有怎样的行为。 RxJava 中的 Observer 接口的实现方式:

    Observer<String> observer = new Observer<String>() {
        @Override
        public void onNext(String s) {
            Log.d(tag, "Item: " + s);
        }
        @Override
        public void onCompleted() {
            Log.d(tag, "Completed!");
        }
        @Override
        public void onError(Throwable e) {
            Log.d(tag, "Error!");
        }
    };
    

    除了 Observer 接口之外,RxJava 还内置了一个实现了 Observer 的抽象类:Subscriber。 Subscriber 对 Observer 接口进行了一些扩展,但他们的基本使用方式是完全一样的:

    Subscriber<String> subscriber = new Subscriber<String>() {
        @Override
        public void onNext(String s) {
            Log.d(tag, "Item: " + s);
        }
        @Override
        public void onCompleted() {
            Log.d(tag, "Completed!");
        }
        @Override
        public void onError(Throwable e) {
            Log.d(tag, "Error!");
        }
    };
    

    1.onStart(): 这是 Subscriber 增加的方法,它会在 subscribe 刚开始,而事件还未发送之前被调用,用来做一些准备工作,但是!!!这个不适用于显示进度条等UI线程操作
    2.unsubscribe():用来取消订阅,要在不再使用的时候尽快在合适的地方(例如 onPause() onStop() 等方法中)调用来解除引用关系

    Observable:被观察者
    Observable observable = Observable.create(new Observable.OnSubscribe<String>() {
        @Override
        public void call(Subscriber<? super String> subscriber) {
            subscriber.onNext("Hello");
            subscriber.onNext("Hi");
            subscriber.onNext("Aloha");
            subscriber.onCompleted();
        }
    });
    
    Subscribe (订阅):
    Observable.subscribe(Observable);//建立订阅关系
    
    线程控制 —— Scheduler

    在RxJava 中,Scheduler ——调度器,相当于线程控制器,RxJava 通过它来指定每一段代码应该运行在什么样的线程。Android中常用的Scheduler有两个:

    Schedulers.io():I/O 操作,耗时的线程
    AndroidSchedulers.mainThread():主线程

    subscribeOn(): 指定 subscribe() 所发生的线程,即 Observable.OnSubscribe 被激活时所处的线程。或者叫做事件产生的线程。
    observeOn(): 指定 Subscriber 所运行在的线程。或者叫做事件消费的线程。
    下面列个例子:

    Observable observable = Observable.create(new Observable.OnSubscribe<String>() {
        @Override
        public void call(Subscriber<? super String> subscriber) {//这里在IO线程操作
            subscriber.onNext("Hello");
            subscriber.onNext("Hi");
            subscriber.onNext("Aloha");
            subscriber.onCompleted();
        }
    })
    .subscribeOn(Schedulers.io()) // 指定 subscribe() 发生在 IO 线程
    .observeOn(AndroidSchedulers.mainThread()) // 指定 Subscriber 的回调发生在主线程
    .subscribe(new Action1<Integer>() {
            @Override
            public void call(Integer number) {//回调到主线程,进行UI操作
                Log.d(tag, "number:" + number);
            }
        });
    

    相关文章

      网友评论

          本文标题:Android中Rxjava的简单使用

          本文链接:https://www.haomeiwen.com/subject/uflrjqtx.html