进程的交流机制——AIDL

      Binder是Android的一个类,实现了IBinder接口。在FrameWork层,Binder用于连接各种Manager(WindowManager,ActivityManager等),比如在启动一个Activity时,ApplicationThread就是一个Binder机制,用于ActivityThread与ActivityManagerService之间进行交流。在应用层,Binder机制是服务端和客户端进行交互的枢纽。

        Binder机制包含Messenger和AIDL,Messenger底层是AIDL,它不需要同步机制,因为Messenger一次只处理一个请求。所以,当存在并发情况的时候,需要使用AIDL。

         任何想要在Binder中传递的数据需要实现IInterface接口。我们在使用系统自动生成的AIDL类时,如果在该类中药调用其他类,必须导入其他类的包,即使在同一个包下。在AIDL中我们需要实现以下几个方法:

          1.DESCRIPTOR

                   这个变量用来标识当前AIDL。

          2.AsInterface(android.os.IBinder obj)

                    将服务端的Binder对象转换成客户端可以调用的AIDL对象,会判断是否处于同一个进程,如果处于同一个进程,通脱Stub内部类来处理,否则通过Stub.Proxy()来处理。

           3.asBinder()

                       返回当前Binder对象。

           4.onTransact(int code,android.os.Parcel data,android.os.Parcel reply,int flags)

                      服务端通过code来判断请求的方法,data是客户端传过来的值,目标方法执行完毕后,会将值存储在reply中用于返回。如果返回false的话,客户端请求失败。

猜你喜欢

转载自blog.csdn.net/qq_38256015/article/details/82983100
今日推荐