RxJava是什么不在多说,上一篇讲过RxJava的并发请求实现:RxJava的并发,这一篇讲RxJava串行的实现,主要用到contactcontactArray操作符,直接上代码:

        Observable<Integer> task1 = Observable.create(emitter -> {//...//这里执行一些任务//执行完成后发射到下一个任务并通知本任务完成emitter.onNext(1);emitter.onComplete();});Observable<Integer> task2 = Observable.create(emitter -> {//...//这里执行一些任务//执行完成后发射到下一个任务并通知本任务完成emitter.onNext(2);emitter.onComplete();});Observable<Integer> task3 = Observable.create(emitter -> {//...//这里执行一些任务//执行完成后发射到下一个任务并通知本任务完成emitter.onNext(3);emitter.onComplete();});

使用contact执行:

        Observable.concat(task1,task2,task3).subscribeOn(AndroidSchedulers.mainThread()).subscribe(index -> {LogUtil.e("index>>" + index);});

执行结果:

这是一个最原始最基础的例子,非常简单了!

contact和contactArray的区别是:contact最多只能执行三个串行任务,而contactArray可以执行多个,并且contactArray是可以直接传入数组的,这样就为一些动态的数量未知的任务提供了方便,下面我们来模拟串行执行下载任务(某些特殊需求,不能用并发,只能用串行):

       String[] filePaths = new String[]{//文件下载地址"https://imtt.dd.qq.com/sjy.10001/16891/apk/9A8E683EEB620438BA39F1BCB6EF1262.apk","https://imtt.dd.qq.com/sjy.10001/16891/apk/9A8E683EEB620438BA39F1BCB6EF1262.apk","https://imtt.dd.qq.com/sjy.10001/16891/apk/9A8E683EEB620438BA39F1BCB6EF1262.apk",};Observable[] tasks = new Observable[filePaths.length];for (int i = 0; i < filePaths.length; i++) {int finalI = i;tasks[i] = Observable.create(emitter -> {new DownLoadUtils().download(filePaths[finalI],new File(File10Utils.getDownloadDirPath(mContext), File10Utils.md5("" + System.currentTimeMillis()) + ".apk"),new DownLoadUtils.DownLoadListener() {@Overridepublic void progress(DownLoadUtils.ProgressInfo progressInfo) {LogUtil.e("正在下载第" + (finalI + 1) + "个文件:" + progressInfo.getProgress());}@Overridepublic void OnSuccess() {LogUtil.e("第" + (finalI + 1) + "个文件下载成功");emitter.onNext(finalI + 1);emitter.onComplete();}@Overridepublic void OnFailure(String errorMsg) {LogUtil.e("第" + (finalI + 1) + "个文件下载失败");emitter.onNext(finalI + 1);emitter.onComplete();}});});}

注意,这模拟了一个动态任务数,任务数量不定,每个下载任务都是异步的,而subscribe则在主线程,执行任务:

   Observable.concatArray(tasks).subscribeOn(AndroidSchedulers.mainThread()).subscribe(index -> {LogUtil.e("index>>" + index);});

执行结果:

DownLoadUtils是自己封装的一个下载工具类,很简单,支持取消任务,支持下载进度,支持下载回调!下载

RxJava串行执行任务相关推荐

  1. promise实现多个请求并行串行执行

    早上查资料,偶然发现这个话题,发现自己并不会,于是乎,下来研究了一下. 想想之前我们用jquery写请求的时候,要实现请求的串行执行,我们可能是这么做的. $.ajax({url: '',data: ...

  2. c#进阶(1)—— Task Parallel Library 并行执行与串行执行

    本文参考的博文出处:http://www.cnblogs.com/stoneniqiu/p/4857021.html 总体说明: (1).理解硬件线程和软件线程 硬件线程也称为逻辑内核,一个物理内核可 ...

  3. shell 并行执行与串行执行

    并行执行:& 串行执行:&& 出现错误退出 什么都不加,出现错误会继续执行

  4. python 并行执行_python 串行执行和并行执行实例

    我就废话不多说了,大家还是直接看代码吧! #coding=utf-8 import threading import time import cx_Oracle from pprint import ...

  5. Promise相关内容(三)——异步获取服务器数据:promise方式解决回调地狱的问题。通过多个.then使代码可读性更高 实现异步任务的串行执行,保证按顺序发送请求获取数据

    Promise相关内容(三)--异步获取服务器数据:promise方式解决回调地狱的问题.通过多个.then使代码可读性更高 & 实现异步任务的串行执行,保证按顺序发送请求获取数据 第一种形式 ...

  6. 并发执行变成串行_一篇讲透如何理解数据库并发控制(纯干货)

    1.数据库并发控制的作用 1.1 事务的概念 在介绍并发控制前,首先需要了解事务.数据库提供了增删改查等几种基础操作,用户可以灵活地组合这几种操作,实现复杂的语义.在很多场景下,用户希望一组操作可以做 ...

  7. 串行任务如何提高效率Java_具有相同属性任务串行有序执行的线程池设计

    我有一个这样的线程池的场景,相信很多人都遇到过: 1,每个用户都可以添加多个任务: 2,有很多的用户和很多的任务: 3,每个用户添加的任务必须有序串行执行,即在同一时刻不能有同时执行一个用户的两个任务 ...

  8. 并发执行变成串行_大神浅谈数据库并发控制 锁和 MVCC

    在学习几年编程之后,你会发现所有的问题都没有简单.快捷的解决方案,很多问题都需要权衡和妥协,而本文介绍的就是数据库在并发性能和可串行化之间做的权衡和妥协 - 并发控制机制.  如果数据库中的所有事务 ...

  9. 并发执行变成串行_一篇讲透如何理解数据库并发控制

    01数据库并发控制的作用 1.1 事务的概念 在介绍并发控制前,首先需要了解事务.数据库提供了增删改查等几种基础操作,用户可以灵活地组合这几种操作,实现复杂的语义.在很多场景下,用户希望一组操作可以做 ...

  10. 大叔也说并行和串行`性能提升N倍(N由操作系统位数和cpu核数决定)

    并行是.net4.5主打的技术,同时被封装到了System.Threading.Tasks命名空间下,对外提供了静态类Parallel,我们可以直接使用它的静态方法,它可以并行一个委托数组,或者一个I ...

最新文章

  1. Go 学习笔记(17)— 函数(03)[defer 定义、defer 特点、defer 释放资源]
  2. 分布式K/V存储方案
  3. MySQL基础篇:SELECT几种子句
  4. 面试官:面对业务量增长10倍、100倍怎么处理? 当场哭出声。。
  5. linux系统防火墙配置浅谈
  6. 开发问题---数据库字段前出现“—”(保存留用,仅供参考)
  7. c语言指针填空题目,C语言指针题目实战
  8. 【java】java JVM问题定位的典型案例分析 笔记 finalizer
  9. 【java笔记】Object类
  10. 现代男人养生的10点忠告
  11. 在Ubuntu上安装使用Systemtap
  12. Cadence输出Gerber文件
  13. 开发Linux应用程序的三种方法
  14. 史上超详细python爬取国家统计局数据
  15. ubuntu下载软件创建桌面快捷方式
  16. post测试+php文件,PHPT – 无法运行使用–POST_RAW–的示例测试
  17. 两种方法筛选出多因子量化选股模型
  18. 如何产生一个全局唯一的流水号(附demo)
  19. 2022年MinGW-w64的安装及配置教程(傻瓜式)
  20. JPA(Java Persistence API,Java持久化API)

热门文章

  1. 讨论下2018年的北京房市(长文慎入)
  2. 小米路由器拨号显示无法连接服务器,小米路由器4连不上网(不能上网)怎么办? | 192路由网...
  3. html5 dreamlive,DREAM LIVE 5th Tour Stargazer即将开演
  4. 深度操作系统deepin下载与安装教程-系统安装
  5. Discuz! 6.x/7.x 全局变量防御绕过导致命令执行
  6. 通俗解释Docker
  7. XP默认输入法快捷键修复
  8. C++读书笔记:多态
  9. 一些简单的css,html,js笔记分享给大家,希望能够帮助到大家
  10. AS3动画效果公式,常用处理公式代码,基本运动公式,三角公式