Android中Rxjava的简单使用

本文参考抛物线大佬的给 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 observer = new Observer() {
    @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 subscriber = new Subscriber() {
    @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() {
    @Override
    public void call(Subscriber 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() {
    @Override
    public void call(Subscriber 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() {
        @Override
        public void call(Integer number) {//回调到主线程,进行UI操作
            Log.d(tag, "number:" + number);
        }
    });

你可能感兴趣的:(Android中Rxjava的简单使用)