RxJava学习笔记

RxJava学习笔记


RxJava介绍

a library for composing asynchronous and event-based programs using observable sequences for the Java VM(一个对于构成使用的Java虚拟机观察序列异步和基于事件的程序库)

RxJava采用观察者模式
- 观察者:Observer
- 被观察者:Observable
- 订阅(或注册):subscribe()

create操作

//创建一个观察者
Observer<String> observer = new Observer<String>() {

@Override
public void onCompleted() {
       Log.i(TAG, "Completed");
}

@Override
public void onError(Throwable e) {
       Log.i(TAG, "Error");
}

@Override
public void onNext(String s) {
       Log.i(TAG, s);
}
};

//使用Observable.create()创建被观察者
Observable observable1 =  Observable.create( 
                    new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> subscriber) {
                subscriber.onNext("Hello");
                subscriber.onNext("Wrold");
                subscriber.onCompleted();
            }
        });
//订阅
observable1.subscribe(observer);

Subscriber操作

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

Subscriber<String> subscriber = new Subscriber<String>() {
  @Override
  public void onNext(String s) {
      Log.d("snow", "Item: " + s);
  }

  @Override
  public void onCompleted() {
      Log.d("snow", "Completed!");
  }

  @Override
  public void onError(Throwable e) {
      Log.d("snow", "Error!");
  }
};

所以如果你只想使用基本功能,选择Observer和Subscriber是完全一样的。它们的区别对于使用者来说主要有两点:

onStart(): 这是Subscriber增加的方法。它会在 subscribe 刚开始,而事件还未发送之前被调用,可以用于做一些准备工作,例如数据的清零或重置。这是一个可选方法,默认情况下它的实现为空。需要注意的是,如果对准备工作的线程有要求(例如弹出一个显示进度的对话框,这必须在主线程执行),onStart()就不适用了,因为它总是在 subscribe 所发生的线程被调用,而不能指定线程。要在指定的线程来做准备工作,可以使用doOnSubscribe()方法,具体可以在后面的文中看到。
unsubscribe(): 这是Subscriber所实现的另一个接口Subscription
的方法,用于取消订阅。在这个方法被调用后,Subscriber将不再接收事件。一般在这个方法调用前,可以使用isUnsubscribed()先判断一下状态。unsubscribe()这个方法很重要,因为在subscribe()之后,Observable会持有Subscriber的引用,这个引用如果不能及时被释放,将有内存泄露的风险。所以最好保持一个原则:要在不再使用的时候尽快在合适的地方(例如onPause()onStop()等方法中)调用unsubscribe()来解除引用关系,以避免内存泄露的发生。

Observable.from()创建被观察者操作

String[] froms={"Hello","word"};
Observable.from(froms)
.subscribe(new Observer<String>() {
    @Override
    public void onCompleted() {
        Log.i("snow", "onCompleted");
    }
    @Override
    public void onError(Throwable e) {
    }
    @Override
    public void onNext(String s) {
        Log.i("snow", "onNext=" + s);
    }
});

Observable.just()创建被观察者操作

String[] justs={"Hello","word"};
Observable.just(justs)
.subscribe(new Observer<String>() {
    @Override
    public void onCompleted() {
        Log.i("snow", "onCompleted");
    }
    @Override
    public void onError(Throwable e) {
    }
    @Override
    public void onNext(String s) {
        Log.i("snow", "onNext=" + s);
    }
});
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值