IPC通信方式-笔记

本篇将介绍IPC方式的一些重点

 一 使用Bundle

  我们直到,四大组件中的三大组件(Activity、Service、Receiver)都是支持在Intent中传递Bundle数据的,由于Bundle实现了Parcelable接口,由于Bundle实现了Parcelable接口,所以它可以方便地在不同的进程间传输。

传输的数据必须能够序列化,比如基本类型、实现Parcelable接口的对象,实现了Serializable接口的对象以及一些Android支持的特殊对象。

除了直接传递数据这种典型的使用场景,它还有一种特殊的使用场景。这种方式的核心思想在于将原本需要在A进程的计算任务转移到B进程的后台Service中去执行,避免了A进程在计算,不能把计算结果传递给要启动的B进程里。

二 使用文件共享

共享文件也是一种不错的进程间通信方式,两个进程通过读/写同一个文件来交换数据,比如A进程把数据写入文件,B进程通过读取这个文件来获取数据。由于Android系统基于Linux,使得其并发读/写文件可以没有限制地进行,甚至两个线程同时对同一个文件进行写操作都是允许的。

通过文件共享这种方式来共享数据对文件格式是没有具体要求的,比如可以是文本文件,也可以是XML文件,只要读/写双方约定数据格式即可。通过文件共享的方式也是有局限性的,比如并发读/写的问题。

三 使用Messenger

通过Messenger可以在不同进程中传递Messenger对象,在Messenger中放入我们需要传递的数据,就可以轻松地实现数据的进程间传递了。Messenger是一种轻量级的IPC方案,它的底层实现是AIDL。

下面是Messenger的两个构造方法

public Messenger(Handler target){

mTarget = target。getIMessenger()

public Messenger(IBinder target){

mTarget=IMessenger。Stub。asInterface(target);

实现Messenger有如下几个步骤,分为服务端和客户端

1.服务端进程

首先,我们需要在服务端创建一个Service来处理客户端的连接请求,同时创建一个Handler并通过它来创建一个Messenger对象,然后在Service的onBind中返回这个Messenger对象底层的Binder即可。

2.客户端进程

客户端进程中,首先要绑定服务端的Service,绑定成功后用服务端返回的IBinder对象创建一个Messenger,通过这个Messenger就可以向服务端发送信息,发消息类型为Message对象。如果需要服务端能够回应客户端,就和服务端一样,我们还需要创建一个Handler并创建一个新的Messenger,并把这个Messenger对象通过Message的replyTo参数传递给服务端,服务端通过这个replTo参数就可以回应客户端。

四使用AIDL

AIDL也是Messenger的底层实现,可以用来跨进称调用服务端。

进程间通信的流程,分为服务端和客户端两个方面。

1.服务端

服务端首先要创建一个Service用来监听客户端的连接请求,然后创建一个AIDL文件,将暴露给客户端的接口在这个AIDL文件中声明,最后在Service中实现这个AIDL接口即可

2.客户端

客户端要做的事就简单一些,首先需要绑定服务端的Service,绑定成功后,将服务端返回的Binder对象转成AIDL接口所属的类型,接着就可以调用AIDL中的方法了。

五使用ContentProvider

ContentProvider的底层实现同样也是Binder。系统已封装好使用起来十分简单,

系统预置了许多ContentProvider,比如通讯录信息、日程表信息等,要跨进程访问这些消息,只需要通过ContentResolver的query、update、insert和delet方法即可。

六使用Socket

Socket也称为“套接字”,是网络通信的概念,它分为流失套接字和用户数据包套接字两种,分别对应于网络的传输控制层的TCP和UDP协议。

一般用于设计我们的聊天室程序,首先在远程Service建立一个TCP服务,然后在主界面中连接TCP服务,连接上了以后,就可以给服务端发消息了。使用Socket的工作机制。


参考:《Andoird开发艺术探索》




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值