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时获取到的数据进行解析 其他函数没什么难度
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时获取到的数据进行解析 其他函数没什么难度