RxJava2 / RxAndroid2的concat拼接多个Observable
RxJava2 / RxAndroid2的concat拼接多个Observable
concat操作符和merge类似,把多个Observable拼接成一个可以观察的输出,例如代码:
package zhangphil.app; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import android.util.Log; import java.util.concurrent.Callable; import io.reactivex.Observable; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.CompositeDisposable; import io.reactivex.functions.BiFunction; import io.reactivex.observers.DisposableObserver; import io.reactivex.schedulers.Schedulers; public class MainActivity extends AppCompatActivity { private final String TAG = getClass().getSimpleName(); private CompositeDisposable mCompositeDisposable = new CompositeDisposable(); @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); test(); } private void test() { DisposableObserver disposableObserver = new DisposableObserver<String>() { @Override public void onNext(String s) { Log.d(TAG, "#####开始#####"); Log.d(TAG + "数据", String.valueOf(s)); Log.d(TAG, "#####结束#####"); } @Override public void onComplete() { Log.d(TAG, "onComplete"); } @Override public void onError(Throwable e) { Log.e(TAG, e.toString(), e); } }; mCompositeDisposable.add( Observable.concat( getObservableA(null), getObservableB(null), getObservableA(null), getObservableB(null)) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribeWith(disposableObserver)); } @Override protected void onDestroy() { super.onDestroy(); // 如果退出程序,就清除后台任务 mCompositeDisposable.clear(); } private Observable<String> getObservableA(Object o) { return Observable.fromCallable(new Callable<String>() { @Override public String call() throws Exception { try { Thread.sleep(500); // 假设此处是耗时操作 } catch (Exception e) { e.printStackTrace(); } return "A"; } }); } private Observable<String> getObservableB(Object o) { return Observable.fromCallable(new Callable<String>() { @Override public String call() throws Exception { try { Thread.sleep(1000); // 假设此处是耗时操作 } catch (Exception e) { e.printStackTrace(); } return "B"; } }); } }
输出:
05-15 14:39:18.667 14456-14456/zhangphil.app D/MainActivity: #####开始##### 05-15 14:39:18.667 14456-14456/zhangphil.app D/MainActivity数据: A 05-15 14:39:18.667 14456-14456/zhangphil.app D/MainActivity: #####结束##### 05-15 14:39:19.669 14456-14456/zhangphil.app D/MainActivity: #####开始##### 05-15 14:39:19.669 14456-14456/zhangphil.app D/MainActivity数据: B 05-15 14:39:19.669 14456-14456/zhangphil.app D/MainActivity: #####结束##### 05-15 14:39:20.170 14456-14456/zhangphil.app D/MainActivity: #####开始##### 05-15 14:39:20.170 14456-14456/zhangphil.app D/MainActivity数据: A 05-15 14:39:20.170 14456-14456/zhangphil.app D/MainActivity: #####结束##### 05-15 14:39:21.171 14456-14456/zhangphil.app D/MainActivity: #####开始##### 05-15 14:39:21.172 14456-14456/zhangphil.app D/MainActivity数据: B 05-15 14:39:21.172 14456-14456/zhangphil.app D/MainActivity: #####结束##### 05-15 14:39:21.172 14456-14456/zhangphil.app D/MainActivity: onComplete

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
API网关的iOS SDK已经支持 IPV6
5月初Apple明文规定所有开发者在6月1号以后提交新版本需要支持IPV6-Only的网络,有些用户在这块就踩到坑了,多次被拒。下面我们就Apple在这块的规定分析一下,我们的App如何才能避免在这个问题上吃Apple的闭门羹。 IPV6-Only支持解释 IPV6是对IPV4地址空间的扩充。目前我们用iOS设备连上网络时,设备被分配的地址均是IPV4地址,但是随着运营商和企业逐渐部署IPV6 DNS64/NAT64网络之后,设备被分配的地址会变成IPV6的地址,而这些网络就是所谓的IPV6-Only网络。重点是,目前iOS设备仍然可以通过此网络去获取IPV4地址提供的内容。客户端向服务器端请求域名解析,首先通过DNS64 Server查询IPv6的地址,如果查询不到,再向DNS Server查询IPv4地址,通过DNS64 Serv
- 下一篇
RxJava2 / RxJava2操作符scan
RxJava2 / RxJava2操作符scan scan操作符将Observable的结果在BiFunction扫描一遍后交给Observer使用,scan最大的功用是在BiFunction里面的apply里面做一次计算,有条件、有筛选的输出最终结果,例如代码例子: package zhangphil.app; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import android.util.Log; import io.reactivex.Observable; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.CompositeDisposable; import io.reactivex.functions.BiFunction; import io.rea...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS7安装Docker,走上虚拟化容器引擎之路
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Hadoop3单机部署,实现最简伪集群
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- SpringBoot2配置默认Tomcat设置,开启更多高级功能