1.Flowable(可观察者)
private void test5(){
Log.d(TAG, "test5执行了");;
Flowable<Integer> flowable = Flowable.create(new FlowableOnSubscribe<Integer>() {
@Override
public void subscribe(final FlowableEmitter<Integer> emitter) throws Exception {
emitter.setCancellable(new Cancellable() {
@Override
public void cancel() throws Exception {
Log.d(TAG, "取消订阅了噢噢噢噢");
}
});
if(callBack == null){
callBack=new CallBack() {
@Override
public void test(String msg) {
Log.d(TAG, "发射了消息");
emitter.onNext(1);
}
};
}
}
}, BackpressureStrategy.BUFFER); //增加了一个参数
Subscriber<Integer> subscriber = new Subscriber<Integer>() {
@Override
public void onSubscribe(Subscription s) {
Log.d(TAG, "onSubscribe");
// s.request(20);//策略BUFFER ,消费能力20 结果只收到20条,但是数据依然在发射
// s.request(0);//策略BUFFER ,消费能力0 结果收不到数据,但是数据依然在发射
s.request(129);
//策略DROP,消费能力20,结果只收到连续的20条,但是数据依然在发射
//策略DROP,消费能力10000,结果数据128条之后,发现直接抛到844了,这说明默认缓冲区满了之后
//129条没有能进入到缓冲区,为什么呢,因为缓冲区满了,库存就那么大,根据DROP策略,只能丢弃
//简单的说,DROP可能导致新产生的事件被丢弃,收到的事件可能会断层
}
@Override
public void onNext(Integer integer) {
Log.d(TAG, "onNext: " + integer);
}
@Override
public void onError(Throwable t) {
Log.w(TAG, "onError: ", t);
}
@Override
public void onComplete() {
Log.d(TAG, "onComplete");
}
};
/**
* .doOnCancel(new Action() {
@Override
public void run() throws Exception {
Log.d(TAG, "取消注册了");
}
})
*/
flowable.doOnCancel(new Action() {
@Override
public void run() throws Exception {
Log.d(TAG, "取消注册了");
}
})
.doOnSubscribe(new Consumer<Subscription>() {
@Override
public void accept(Subscription subscription) throws Exception {
Log.d(TAG, "您订阅了");
mSubscription=subscription;
}
}).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(subscriber);
}