AIDL与Proxy--stub设计模式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/oqzuser1q2w3e4r5t/article/details/88693730

1、IBinder接口 

单层EIT造型构成的单层框架

 双层EIT,双层框架

双层框架代表的意义:

使Stub获得最大利益,就要使Stub处于E 与T之间,这样将E与T分离开了以后,E与T只能通过Stub来

进行交互,这样Stub就获得了最大的利益,同时也阻隔了E与T之间频繁的通信。

所以Stub与Proxy完全掌握了大局,并且阻隔各方面的接触。

二、IBinder的用途

 AIDL 机制是什么?

由于APP的开发速度是根据客户需求来定,所以在架构生成时就需要创建一个IBinder单例接口

在使用这个接口的时候:

1、APP开发者要有一个编码的过程,把每个函数传过去,

2、MyBinder基类的onTransact()函数 通过回调向APP端传回ibinder

3、在解码过程中,会出现对code值的判断,所以会让每个程序变得有些复杂

 

通过这种方式来对APP端和MyBinder的代码都进行简化

IBinder的一般用途

android中aidl通信主要是通过单一的IBinder接口,这个接口属于单例模式,transact与IBinder间就是跨进程的分隔线,

client端需要通过IBinder的transact(),透过IPC机制来调用到远方的onTransact函数,同时这个结构属于双层的EIT框架。

 具体使用方法如下:

IBinder接口是定义在Binder的基类上,一般做法,APP中创建Activity来startService,通过myBinder()函数来找到Service,

myService调用它自有的生命周期函数。

例子,通过aidl来使mp3完成播放操作

myActivity调用IBinder,execTransact()函数被调用,从进程的线程池中拿出来一个BinderTread,这个线程来调用onTransact(),这个线程sendMessage方法来通知 myService 中的handleMessage().当然myService也可以将信息通过BroadCast发送给Activity

所以,当myActivity中通过onReceiver()函数来处理myService发送的信息

1、 activity通过bindService(),来启动Service,Service这边会创建一个小线程,当小线程准备MQ和Looper

2、用户对按键进行点击:如果点击的是START,就会给它编码为1,就会有BinderThread通过小线程 将消息发送给MQ,通过判断编码的数字来确定发送给Activity的信息。

保存得到的IBinder.

解码动作:

当得到编码值,Service已经准备好了小线程的邮差来发送msg

小线程接到了MQ有信息,它会先送出广播形的信息给Activity

activity能到信息,主线程刷新UI

猜你喜欢

转载自blog.csdn.net/oqzuser1q2w3e4r5t/article/details/88693730