倒计时 (另一种实现方式CountDownTimer)
//参数说明 0 开始时间 10 总的时间 0 从某个时间开始 1 每次倒计时多少 TimeUnit.SECOND 时间单位 (可以设置其他的一般用秒)
Flowable.intervalRange(0, 10, 0, 1, TimeUnit.SECONDS).observeOn(AndroidSchedulers.mainThread()).doOnNext(new Consumer() {
@Override
public void accept(Long aLong)throws Exception {
//目前时间
}
}).doOnComplete(new Action() {
@Override
public void run()throws Exception {
//结束
}
})
.subscribeOn(Schedulers.io())
.subscribe();
RxJava 三部曲第一步:初始化 Observable第二步:初始化 Observer第三步:建立订阅关系
Observable.create(new ObservableOnSubscribe() {//初始化被观察者 subscribeOn 设置被观察者线程
@Override
public void subscribe(ObservableEmitter e)throws Exception {
Log.e("Observable", "Observable thread is : " + Thread.currentThread().getName());
e.onNext(true);
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
//.subscribeWith(new Observer() {//有返回对象 new ResourceObserver 返回 Disposable new Observer 返回 Observer
.subscribe(new Observer() {//无返回对象 subscribe订阅观察者 new Observer初始化观察者 observeOn 设置观察者线程
@Override
public void onSubscribe(Disposable d) {
Log.e("Observable1", "Observable thread is : " + Thread.currentThread().getName());
}
@Override
public void onNext(Boolean aBoolean) {
Log.e("Observable2", "Observable thread is : " + Thread.currentThread().getName());
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
Observable 跟Flowable
相同点:基本使用无差别。
不同点::即被观察者和观察者处于不同的线程中 ,Observable 如果被观察者发送的频率过高,导致订阅者不能即时处理。但是缓存太多容易造成OOM。即背压
解决方式:Flowable 配置 BackpressureStrategy
操作数据库操作 Flowable 跟 Single
没有数据返回:Single将触发onError(EmptyResultSetException.class),Flowable不发射数据,既没有onNext,也没有onError.
有数据返回:Single将触发onSuccess Flowable将触发onNext
数据有更新:当Single.onComplete被调用后user有更新没有回调,数据有更新,Flowable对象都会自动发出,允许你用最新的数据更新UI
Completable : 成功回调方式
public void addDisposable(Completable completable, Action action) {
if (compositeDisposable ==null) {
compositeDisposable =new CompositeDisposable();
}
compositeDisposable.add(completable
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(action));
}
Single : 成功、错误回调方式,支持只定义一个
Consumer
public void addDisposable(Single single, Consumer consumer, Consumer consumer1) {
if (compositeDisposable ==null) {
compositeDisposable =new CompositeDisposable();
}
compositeDisposable.add(single.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(consumer, consumer1));
}
Flowable: 成功、错误回调方式
支持只定义一个 Consumer
public void addDisposable(Flowable flowable, Consumer consumer, Consumer consumer1) {
if (compositeDisposable ==null) {
compositeDisposable =new CompositeDisposable();
}
compositeDisposable.add(flowable.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(consumer, consumer1));
}