java disposable_RxJava(八)Disposable和Transformer

Disposable和Transformer

一,Disposable

1.当Observable发送数据,Observer订阅数据时,就形成一个Disposable,可用于在退出时取消订阅。 Disposable disposable = Observable.just(1,2,3) .subscribeOn(Schedulers.newThread()) .observeOn(AndroidSchedulers.mainThread()) .map(new Function() { @Override public Integer apply(Integer integer) { return integer + 1; } }).subscribe(new Consumer() { @Override public void accept(Integer integer) throws Exception { } }); }

2.CompositeDisposable 一个复合订阅容器,用于管理所有的Disposable,方便在退出时取消订阅,避免内存溢出。

通常写在BaseActivity中。RxLifecycle生命周期管理放内存泄露 CompositeDisposable compositeDisposable = new CompositeDisposable(); Disposable disposable = Observable.just(1, 2, 3) .subscribeOn(Schedulers.newThread()) .observeOn(AndroidSchedulers.mainThread()) .map(new Function() { @Override public Integer apply(Integer integer) { return integer + 1; } }).subscribe(new Consumer() { @Override public void accept(Integer integer) throws Exception { } }); //添加Disposable到容器统一管理 compositeDisposable.add(disposable); //当退出时,如onDestory中调用,取消所有订阅 compositeDisposable.clear();

二,Transformer 转换器

可通过一个Transformer转换器将Observable/Flowable/Completable/Maybe/Single转换为另一个Observable/Flowable/Completable/Maybe/Single。

转换器:ObservableTransformer,FlowableTransformer,CompletableTransformer,MaybeTransformer,SingleTransformer。 //数据转换 public static ObservableTransformer intToStrTransformer(){ //Integer转String的转换器 return new ObservableTransformer() { //返回一个发射String数据的Observable @Override public ObservableSource apply(Observable upstream) { return upstream.map(new Function() { @Override public String apply(Integer integer) throws Exception { return integer.toString(); } }); } }; } private void MyTest(){ Observable.just(1,2,3) .compose(intToStrTransformer()) .subscribe(new Consumer() { @Override public void accept(String s) throws Exception { } }); } //切换线程 public static FlowableTransformer transToMain(){ return new FlowableTransformer() { //返回一个在io线程发送数据,在main线程处理数据的Publisher @Override public Publisher apply(Flowable upstream) { return upstream.subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()); } }; } private void MyTest(){ Flowable.interval(1000, TimeUnit.MILLISECONDS) .onBackpressureBuffer() .compose(transToMain()) .subscribe(new Consumer() { @Override public void accept(Long aLong) throws Exception { log.d(TAG, "accept: "+aLong); } }); } //缓存数据 public static FlowableTransformer transToCache(final String key, final Cache cache){ return new FlowableTransformer() { @Override public Publisher apply(Flowable upstream) { return upstream.map(new Function() { @Override public T apply(T t) throws Exception { cache.put(key,t) return t; } }); } }; } private void MyTest(){ Flowable.interval(1000, TimeUnit.MILLISECONDS) .onBackpressureBuffer() .compose(MainActivity.transToCache("key",new Cache())) .subscribe(new Consumer() { @Override public void accept(Long aLong) throws Exception { log.d(TAG, "accept: "+aLong); } }); }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值