android ipc简单理解,Android IPC 机制【1】--简介
一、android 中进程间通信常用的有以下几种机制
-----------------------------------------------------------------------------------------------------------------------
名称 优点 缺点 适用场景
-----------------------------------------------------------------------------------------------------------------------
Bundle 简单易用 只能传输Bundle支持的数据类型 四大组件间的进程通信
-----------------------------------------------------------------------------------------------------------------------
文件共享 简单易用 不适合高并发场景,并且无法做到 无并发访问情形,交换简单
进程间及时通信 的数据实时性不高的场景
-----------------------------------------------------------------------------------------------------------------------
AIDL 功能强大,支持一对多并发 使用稍复杂,需要处理好线程同步 一对多通信且有RPC需求
通信,支持实时通信
-----------------------------------------------------------------------------------------------------------------------
Messenger 功能一般,支持一对多串行 不能很好处理高并发情形,不支持 低并发的一对多即时通
通信,支持实时通信 RPC, 数据通过Message进行传输 信,无RPC需求 或者无需
只能传输Bundle支持的数据 类型 返回结果的RPC需求
----------------------------------------------------------------------------------------------------------------------
ContentProvider 在数据源访问页面功能强大, 可以理解为受约束的AIDL, 一对多的进程间的数据共享
支持一对多并发数据共享, 主要提 供数据源的CRUD操作
可通过Call方法扩展其他操作
----------------------------------------------------------------------------------------------------------------------
Socket 功能强大,可以通过网络数 实现细节有点繁琐 网络数据交换
字传输节流,支持一对多 ,不支持直接的RPC
并发实时通信
---------------------------------------------------------------------------------------------------------------------
二、 Bundle
Bundle实现了Parcelable接口,所以可以方便的在不同进程间传输,当在一个进程中启动了另外一个进程的Activity、Service、Receiver,可以在Bundle中附加需要传输给远程进程的信息并通过Intent发送出去。
三、文件共享
Activity1:-----------------
private void persistToFile() {
new Thread(new Runnable() {
@Override
public void run() {
User user = new User(1, "hello world", false);
File dir = new File(MyConstants.CHAPTER_2_PATH);
if (!dir.exists()) {
dir.mkdirs();
}
File cachedFile = new File(MyConstants.CACHE_FILE_PATH);
ObjectOutputStream objectOutputStream = null;
try {
objectOutputStream = new ObjectOutputStream(
new FileOutputStream(cachedFile));
objectOutputStream.writeObject(user);//利用Serializable序列化的过程
Log.d(TAG, "persist user:" + user);
} catch (IOException e) {
e.printStackTrace();
} finally {
MyUtils.close(objectOutputStream);
}
}
}).start();
}
Activity2:----------------
private void recoverFromFile() {
new Thread(new Runnable() {
@Override
public void run() {
User user = null;
File cachedFile = new File(MyConstants.CACHE_FILE_PATH);
if (cachedFile.exists()) {
//对MainActivity中user对象反序列化的过程(Serializable),
//得到的是一个新的对象
ObjectInputStream objectInputStream = null;
try {
objectInputStream = new ObjectInputStream(
new FileInputStream(cachedFile));
user = (User) objectInputStream.readObject();
Log.d(TAG, "recover user:" + user);
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} finally {
MyUtils.close(objectInputStream);
}
}
}
}).start();
}
android ipc简单理解,Android IPC 机制【1】--简介相关推荐
- Android之最好理解的Binder机制
转载:http://weishu.me/2016/01/12/binder-index-for-newer/ Binder学习指南 发表于 2016-01-12 | 92条评论 | 3 ...
- Android开发--简单实现Android应用的启动页
Android启动页效果展示 平时打开手机的应用时,会跳出来3秒钟的广告后,再进入应用.今天我们就来简单实现一下引导页的功能. 1.首先,新建一个activity页面,命名:SplashActivit ...
- android webview简单使用,android WebView 简单使用Demo
activity配置文件:activity_main.xml android:layout_width="match_parent" android:layout_height=& ...
- android:exported简单理解
最近在看微信分享.收藏和发送到朋友圈的官方文档,发现其中有一个android:exported的属性,当在向微信发送了请求后需要接受请求的返回值时,须在androidManifest设置该属性为tru ...
- Android之简单了解Android OS内部机制
对于Android操作系统的启动过程,相对比较复杂,这里只是了解一下原理. 做过硬件开发都知道当我们设备接通电源后会有一个称作"引导加载程序"进行初始化,我们叫它bootloade ...
- Android 动画简单理解
2019独角兽企业重金招聘Python工程师标准>>> 官网参考 参考二 Android动画分为两大块: Property Animation(属性动画) View Animatio ...
- messenger android 4.,简单聊聊Android AIDL之Messenger
哈喽,大家好,接触Android的同学们对AIDL这个概念肯定不会陌生,就算没用过,那肯定也是听过.很多刚开始接触Android的朋友可能会感觉AIDL很难.今天,就用Messenger来教大家如何简 ...
- android scroller,深入理解Android中Scroller的滚动原理
View的平滑滚动效果 什么是实现View的平滑滚动效果呢,举个简单的例子,一个View从在我们指定的时间内从一个位置滚动到另外一个位置,我们利用Scroller类可以实现匀速滚动,可以先加速后减速, ...
- Android实现简单日记,Android学习日记
Day 7 Title UI常用组件basicView android系统中的所有UI类都是建立在View和ViewGroup这两个的基础之上的.所有View的子类称为"widget&quo ...
最新文章
- HTML+CSS的学习
- CSS3 选择前几个元素 选择后几个元素等问题
- 了解前端——js需知道知识点
- (32)Gulp CSS hack 与 Autoprefixer
- 用AI算法分析光影看到盲点:这项MIT新研究偷学到二娃技能
- windows7 64位 php5.3安装php_mongo.dll方法 各个版本
- java树遍历算法_Java递归算法实现目录树的遍历
- cantor数表 and nyoj85有趣的数
- 2021-09-23
- bigemap软件功能对比
- 机房维护 网拷_利用网络还原系统(远志)快速维护机房
- 详细介绍如何使用MATLAB中的机器人工具箱建立机器人模型(DH法建模)(机械臂)
- Java实验实现一个circle类_Java实验报告四
- 用LSTM生成武侠人名
- php ios表情包,十分钟开发一款 iOS 表情包 App
- dw cs6 html建站点,dreamweaver cs6网页中制作锚点链接的教程方法
- PL/SQL将电话号码前三位用括号括起来(以XXX-XXX-XXXX为例)
- PTC creo 3.0 安装教程
- echarts图表生成base64
- php中下载xls某个文件,php下载excel文件
热门文章
- 彻底理解Python中的yield
- Machine Learning On Spark——基础数据结构(二)
- 详解log4j2(下) - 按日志级别区分文件输出
- node-red教程 5 函数节点
- 聊聊高并发(三十)解析java.util.concurrent各个组件(十二) 理解CyclicBarrier栅栏
- 史上最全Java面试266题:算法+缓存+TCP+JVM+搜索+分布式+数据库
- NETBEANS_RUBYROR shortcut
- linux运维常用命令一句话
- How to change the status of Prepayment invoice
- Asp.NET大文件上传组件开发总结(二)---提取文件内容