android 文件并发读写,Android下,rxJava+retrofit 并发上传文件和串行上传文件的效率为什么差不多?...
有个功能需要同时上传N个文件。代码如下:
ApiService as = ApiManager.getApiService();
final ExecutorService es = Executors.newFixedThreadPool(9);
final int count = Bimp.tempSelectBitmap.size();
final CountDownLatch finishedLatch = new CountDownLatch(count);
final long start = System.currentTimeMillis();
for (int k = 0; k < count; k++) {
final String fp = Bimp.tempSelectBitmap.get(k).getImagePath();
RequestBody fbody = RequestBody.create(MediaType.parse("image/*"), new File(fp));
as.uploadAttach(fbody)
.subscribeOn(Schedulers.from(es))
.observeOn(Schedulers.computation())
.subscribe(new Subscriber() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
finishedLatch.countDown();
Log.e("UPLOAD FAILED -------->", fp);
}
@Override
public void onNext(UploadAttachJSON uploadAttachJSON) {
finishedLatch.countDown();
sb.append(uploadAttachJSON.url).append(",");
Log.e("UPLOADED IMAGE URL -->", uploadAttachJSON.url);
h.post(new Runnable() {
@Override
public void run() {
pd.setMessage("正在上传... " + (count - finishedLatch.getCount()) + "/" + count);
}
});
}
});
}
try {
finishedLatch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
long end = System.currentTimeMillis();
Log.e("IMAGE UPLOAD COMPLETED", (end - start) + "");
es.shutdown();
以上为并行的写法。从线程池中拿出N个线程来同时上传这N个文件。
串行写法:
.subscribeOn(Schedulers.io()) 或者 用Observable.merge来合并这些请求。
结果发现并行和串行所花费的时间几乎都差不多。。 是不是和android底层有关?这些网络请求其实最后都被底层给block了,然后串行出去?
android 文件并发读写,Android下,rxJava+retrofit 并发上传文件和串行上传文件的效率为什么差不多?...相关推荐
- 如何用usb电缆连接到计算机,如何使用USB串行电缆将文件从计算机传输到树莓派...
第1步:为Raspberry Pi准备SD卡 完成Adafruit教程中演示的步骤,但要进行以下修改: 选择Raspbian发行版 跳过测试和配置 执行不要从SD卡读卡器/写入器中删除SD卡 不要不要 ...
- android 监控app 读写,Android端 APP性能监控实践
如今大部分的APP测试工作关注点主要集中在功能的逻辑与交互上,由于各种原因(比如测试时间不够,测试手段有限等等),对APP客户端的性能数据往往比较忽视,然而经过移动互联网爆发式发展后,许多App功能差 ...
- android vold 挂载读写,Android——Vold磁盘挂载_主体构建(一)
这段时间为了把mmc的一个block当成sdcard内置,学习了下android的vold磁盘挂载模块,记录一下(android 4.2.2). 一:Vold的编译及启动 vold的源码位置在andr ...
- android 挂载system 读写,android使用mount挂载/system/app为读写权限,删除或替换系统应用...
注意:以下代码中#开头的则为需要执行的shell命令,其他的为打印的结果.#代表需要使用ROOT权限(su)执行,所以想要修改您android手机某个目录挂载为读写,首先需要有ROOT权限! 先要得到 ...
- sqlite多进程并发读写模式下,返回SQLITE_BUSY错误的处理方法
SQLite作为一款小型的嵌入式数据库,本身没有提供复杂的锁定机制,无法内部管理多路并发下的数据操作同步问题,更谈不上优化,所以涉及到多路并发的情况,需要外部进行读写锁控制,否则SQLite会返回SQ ...
- android ble 连续读写,Android BLE实现对蓝牙的读写
[实例简介] 通过修改官方的demo实现对蓝牙的读写操作,详细http://blog.csdn.net/chenfengdejuanlian/article/details/45787123 [实例截 ...
- pyth命令_如何:在Windows上设置用于从命令行运行.py文件的Python可执行文件
pyth命令 Summary: When you type script.py at the Command Prompt on Windows, the Python executable used ...
- Android面试题之Android部分
1. Activity 系列问题 1.1 绘制Activity生命周期流程图 1.2 介绍下不同场景下Activity生命周期的变化过程 启动Activity: onCreate()->onSt ...
- Python随笔:对 txt 文件进行读写,清除,删除操作
Python随笔:对 txt 文件进行读写,清除内容,删除操作 文章目录 Python随笔:对 txt 文件进行读写,清除内容,删除操作 1.文件读写 1.1 读写文件前打开文件的两个方法 1.2 写 ...
最新文章
- Db4o结合Linq、Lambda表达式的简单示例
- Android 开发笔记“关闭默认键盘”
- 新基建带来新机遇!大数据产业发展需“四驱”推动
- 鸿蒙系统-手机-JS FA(Feature Ability)调用Java PA(Particle Ability)
- MOSS 2018 回顾:向 40 余个开源项目捐赠 97 万美元
- Microsoft JDBC Driver 4.0 for SQL Server
- yii 设置时区 不生效_Java 程序处理异地机房不同时区问题
- 二叉排序树求每个结点平衡因子程序
- 计算机环境变量怎么恢复默认,环境变量怎么还原
- 无法访问 文件目录损坏且无法读取
- php 世界时间,PHP 时区列表[时差]
- 2021年7月最新iOS面试题总结(答案篇)
- php的repl是什么,更好的 repl
- 【jquery】Chosen.jquery.js 插件动态加载数据问题
- 访问服务器上的图片显示404,vue run build打包之后服务器端访问图片404
- shell脚本回车换行_终于搞懂了回车与换行的区别
- 安装多可预览控件后,不能正常预览和修改该怎么办?
- 基于环信webim视频语音通话
- ElasticSearchTransportClient集成SearchGuard插件实现索引级别的权限管控
- 900页数学论文证明旋转的黑洞不会爆炸,丘成桐:30多年来广义相对论首次重大突破...
热门文章
- python实现真正的冒泡排序算法(时间复杂度优化版)!
- Python基础教程:list和tuple
- 传送门骑士修改服务器数据,传送门骑士修改经验 | 手游网游页游攻略大全
- mongodb3.2 java,MongoDB学习笔记:(3)、mongodb 3.2在java环境中的简单CRUD
- vs cmake opencv 远程 ubuntu 开发时:vs代码出现紫色波浪线且报错怎么办?
- 如何在VS一个工程里面测试不同代码?(创建不同项目,并将需要运行的项目设为启动项目)
- pycharm shadows name 'xxxx' from outer scope 警告
- asp用于取代什么技术_ASP是不是已经被淘汰了?
- python毒酒检测_检测OpenSSL漏洞的脚本
- 打开表时提示 Out of resources when opening file......错误解决