| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 移动开发 -> Android 如何实现高效跨进程传递大数据 -> 正文阅读 |
|
[移动开发]Android 如何实现高效跨进程传递大数据 |
第一.可以实现进程间通信的方式 1.管道,一对一通信,两次拷贝,不满足一对多和效率方面要求 2.socket通信,一对多,性能太低,而且不安全 3.共享内存,多对多,0拷贝,效率高,但是不安全 4.binder,一对多,一次拷贝,效率高,实名安全 第二.安卓系统中都用到了哪些进程间通信方式(应该是都用了) 1.socket通信,SystemService进程和Zygote进程的通信方式就是scoket,那是因为Zygote进程是先创建的进程,是SystemService进程的父进程,因此只能作为服务端,而SystemService作为客户端,SystemService中才会去启动binder驱动,因此无法实现于Zygote进程的通信,因此借助于socket实现通信。 2.共享内存,安卓系统之间传递大文件大数据时用 3.binder,应用之间传递数据时基本上都用这个方法 第三. binder进程间通信的问题 binder实现进程间通信,大小是有限制的,大小限制为1M-8K的大小,为什么是1m-8k呢,因为mmap函数的基本单位为页,而每页的大小为4K,也就是说有2页的数据是额外的数据,额外的数据是什么呢?参考一下http通信协议,http由请求行、请求头、请求体三部分组成,同样的道理,其实binder进行进程间通信也需要这些信息,因此留出来来8K的内存大小来传递请求头和请求行等信息,这8K的内容为系统自动配置的,我们无法使用这8K内存大小。具体到底层代码,底层copy_from_user方法,被调用了2次,第一次传递的数据大小为8K,第二次传递的数据大小为我们传递的真实数据内容,大小为1M-8k. 第四.如何高效传递大文件 1.方法一:使用binder机制 ? 上面分析了,binder机制最大的传输数据量大小为1M-8K,那如何传递大于1M-8k的内容呢?答案是分段传输。我们可以把文件分割为多端,分段传输,然后再进行合并。(服务端向客户端传递大文件,反向思路一样)总体思路为: 1)客户端与服务端建立连接 2)服务端先告诉客户端数据量总大小,客户端建立同样大小容器等待接收 3)服务端将数据分割,分段传输给客户端,客户端分段接收,拼接到结果容器中 4)服务端告知客户端数据传输结束,客户端进行数据还原展示 特点:分段传输(参考网络通信下载文件思路),效率高,测试发现比方法二还要高 2.采用共享内存+binder方式 由于是跨进程大文件传递文件,共享内存的0拷贝肯定是最合适的,但是共享内存需要借助binder来将文件描述符发送给客户端,客户端通过文件描述符拿到数据。思路如下: 1)服务端开启共享内存,将数据存入共享内存区域 2)通过binder将文件描述符发送到客户端 3)客户端通过文件描述符拿到共享内存数据 特点:效率高,但是亲测发现其实和binder分段传输效率差不多。 demo下载地址:?安卓跨进程高效通信demo-Android文档类资源-CSDN下载 |
|
移动开发 最新文章 |
Vue3装载axios和element-ui |
android adb cmd |
【xcode】Xcode常用快捷键与技巧 |
Android开发中的线程池使用 |
Java 和 Android 的 Base64 |
Android 测试文字编码格式 |
微信小程序支付 |
安卓权限记录 |
知乎之自动养号 |
【Android Jetpack】DataStore |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 1:01:45- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |