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 ...
最新文章
- 浪潮服务器开始虚拟化,(浪潮服务器-虚拟化解决方案.ppt
- android的 selector 背景选择器和 shape 详解(转)
- oracle使用sqlplus创建表空间
- 计算机视觉基础:图像处理(上)
- 科技论文的几种类型-如何写好科技论文之我见(二)
- SGU 275. To xor or not to xor
- 使用Lubuntu开发Android应用
- java exception 行号_java日志记录错误的文件_方法_行号_报错信息
- mysql 与 redis 如何保证数据一致性问题 ?
- @async 如何返回list_图解 Await 和 Async
- 您应该知道的ES2020中的10个JavaScript新功能
- cas3 自定义页面
- 【毕业设计】毕业设计选题指南
- 2022年MySQL8 OCP最新题库整理,传授有缘人
- 细胞生物学-7-叶绿体和线粒体
- 用cisco服务器添加html,在接入服务器上配置基本 AAA
- 教你如何利用python调用摄像头
- 网页源文件代码隐藏的代码(转)
- android 生成bks_Android 添加 证书(pem,crt,p12,bks,jks)到 keystore.bks
- 亚马逊云科技物联网产业创新峰会与你相聚蓉城