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时获取到的数据进行解析 其他函数没什么难度
androidx获取iccid android iccid
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
android13怎么获取iccid android iccid
程序将实现这样一个简单功能:Service端提供多种饮料信息供选择,Client端先选择种类,再选择数量,随后计算总价。 新建一个Android项目,我这里取名DrunkService,然后新建一个包aidl。 在aidl包上右键新建
android13怎么获取iccid AndroidStudio AIDL IPC android