RxJava2 / RxAndroid2的merge操作合并多个Observable
RxAndroid2/RxJava2的merge操作合并若干个Observable为单个可观测的Observable,形成单一线性的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() { } @Override public void onError(Throwable e) { Log.e(TAG, e.toString(), e); } }; mCompositeDisposable.add( Observable.merge( 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 13:40:41.929 12972-12972/zhangphil.app D/MainActivity: #####开始##### 05-15 13:40:41.929 12972-12972/zhangphil.app D/MainActivity数据: A 05-15 13:40:41.929 12972-12972/zhangphil.app D/MainActivity: #####结束##### 05-15 13:40:42.930 12972-12972/zhangphil.app D/MainActivity: #####开始##### 05-15 13:40:42.930 12972-12972/zhangphil.app D/MainActivity数据: B 05-15 13:40:42.930 12972-12972/zhangphil.app D/MainActivity: #####结束##### 05-15 13:40:43.430 12972-12972/zhangphil.app D/MainActivity: #####开始##### 05-15 13:40:43.431 12972-12972/zhangphil.app D/MainActivity数据: A 05-15 13:40:43.431 12972-12972/zhangphil.app D/MainActivity: #####结束##### 05-15 13:40:44.431 12972-12972/zhangphil.app D/MainActivity: #####开始##### 05-15 13:40:44.431 12972-12972/zhangphil.app D/MainActivity数据: B 05-15 13:40:44.431 12972-12972/zhangphil.app D/MainActivity: #####结束#####

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Android设置ScrollView回到顶部的三种方式 (转)
一、ScrollView.scrollTo(0,0) 直接置顶,瞬间回到顶部,没有滚动过程,其中Y值可以设置为大于0的值,使Scrollview停在指定位置; 二、ScrollView.fullScroll(View.FOCUS_UP) 类似于手动拖回顶部,有滚动过程; 三、ScrollView.smoothScrollTo(0, 0) 类似于手动拖回顶部,有滚动过程,其中Y值可以设置为大于0的值,使Scrollview停在指定位置。 转自:http://blog.csdn.net/xuanhg221/article/details/52931707 本文转载自SharkBin博客园博客,原文链接:http://www.cnblogs.com/SharkBin/p/7520345.html如需转载自行联系原作者
- 下一篇
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
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS7安装Docker,走上虚拟化容器引擎之路
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Hadoop3单机部署,实现最简伪集群
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2配置默认Tomcat设置,开启更多高级功能