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();

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值