您的位置:首页 > 移动开发 > Android开发

android IPC机制简要个人理解(可能有差错 日后再来修改)

2016-05-13 07:12 417 查看
IPC 进程间通信 在android中通常采用binder实现 也可以采用Socket实现

Binder 分为三个部分 Binder服务端 Binder驱动 Binder客户端 Binder服务端每创建一个就会在binder驱动中存放一个mRemote对象 即服务端的引用

当客户端请求这个服务的时候 客户端就会获取驱动中的mRemote对象 调用它的transact方法 这个方法会向服务端发送请求的信息 然后服务端处理请求

mRemote挂起当前请求等待服务端通知,收到通知后继续执行客户端线程

AIDL 就是IPC的一个典型的例子

首先绑定一个远程服务 bindService() 传入 intent 和 回调接口

个人理解 在执行进程间通信时不同于同一个进程间的通信,当在同一个进程通信时,直接启动服务,然后返回服务中的binder对象 之后回调接口即可 因为在同一个进程 binder对象可共享

因此可以这样实现 可是在不同进程间通信的时候就不可以这样子了 因为不同进程间不共享同一块内存,因此需要使用binder机制进行进程间通信了

在与远程服务连接完成后 会返回一个远程连接的代理 其实也就是Ibinder对象的代理 在代理中会有mRemote变量 然后客户端调用代理的某些方法 在代理的方法中

会调用mRemote的trancact方法 调用远程服务的这个方法 然后在服务端就调用该方法,将结果写入reply中 返回给 客户端 因为代理是一个 所以2边必须都有一样的aidl文件

客户端中就可以获得远程服务的执行结果了

在asInterface(Ibinder) 中 Ibinder 对象其实就是mRemote对象 只需要把这个对象封装成代理(跨进程) 返回 即可执行代理的方法 其实代理只是传入了mRemote

来执行一些方法 罢了 onTranscat 是回调函数 用于执行 transcat时获取到的数据进行解析 其他函数没什么难度
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: