IPC的Proxy-Stub设计模式

1. 复习IBinder接口

单层框架图:

两层框架:




对于App而言,只能看到上层的op接口,但是看不到fun()接口了。
改变了t的实现接口:


App还是需要直接访问interface接口,并没有完全的隔离开来。

改进的版本:

建立了中间的曹操类。










2. IBinder接口的一般用途



对于上述的代码中,开发者需要编写额外的代码,加重了开发者的负担。


本单元没有用“proxy-stub” -> 下单元采用“proxy-stub” -> AIDL




从Binder thread pool中选择一个线程执行service中的代码。



2.1 myActivity代码实战
在 myActivity 中创建一个 BroadcastReceiver







2.2 myBinder代码实战
下面的代码实在binder thread中执行的。







step1: Activity -> Service: oncreate()
step2: Service -> new myBinder and create a new thread
step3: myActivity -> myBinder : ontransact()
3. 包装IBinder而接口(如何写Proxy及Stub类)







4. 谁来写Proxy类和Stub类呢?














5. AIDL工具(谁来写Proxy及Stub类)





类别模板





详解AIDL

实际采用的适配器的模式,将IBinder接口转换成用户自己定义的接口。




Proxy主要承担了编码的作用,同时还需要实现客户自定义的接口。
Stub主要承担了解码的作用,同时还需要实现客户自定义的接口。















本文深入探讨了Android中的IPC通信机制,重点介绍了Proxy-Stub设计模式及其在实现 Binder 中的角色。通过复习IBinder接口,阐述了其一般用途,并通过代码实战展示了如何在Activity中使用BroadcastReceiver以及Binder线程中的操作。进一步讨论了如何包装IBinder接口,以及Proxy和Stub类的编写。最后,详细解释了AIDL(Android Interface Definition Language)工具在生成Proxy和Stub类中的作用,它简化了跨进程通信的复杂性,将IBinder接口转换为用户自定义接口。
799

被折叠的 条评论
为什么被折叠?



