个人总结/Binder+AIDL自动生成Java文件中的代码分析

    














    此类继承了android.os.IInterface这个接口,同时它自己也是接口(所以可以在Binder中传输的接口都需要继承此接口)

    结构

            1.声明两个方法,同时声明了两个整型id表示两方法(用于标识在transact过程中,客户端请求的方法)

            2.声明一个内部类Stub->Binder类

                客户端与服务端位于同一进程时,方法调用不会走跨进程的transact过程

                不同进程,transact过程/逻辑由Stub内部代理类Proxy来完成

   Tips:核心【内部类Stub+Stub内部代理类Proxy】

   

DESCRIPTOR:Binder唯一标识,一般用Binder类名标识

asInterface(android.os.IBinder obj):用于把服务端的Binder->客户端所需AIDL接口类型对象

                                                             同一进程,返回服务端Stub本身,否则返回系统封装后的Stub.proxy对象

asBinder:用于返回当前Binder对象

onTransact:运行可服务端的Binder线程池中(int code,android.os.Parceldata,android.os.Parcel reply,int flag)

                     服务端通过Code确定请求的目标方法/从data中取出目标方法所需参数/执行目标方法->向reply写入返回值

Proxy#getBookList:运行于客户端

        内部实现    1.创建该方法所需输入型Parcel对象(-data),输出型Parcel对象(-reply),和返回值对象list。

                          2.把该方法参数写入-data

                          3.调用transact发起RPC(远程过程调用),同时线程挂起

                          4.服务端onTransact会被调用,知道RPC过程返回,线程进行,从reply中取出RPC过程的返回结果,返回reply的数据


Proxy#addBook:运行在客户端,同上执行过程,无返回值,不需要从—reply中取出返回值。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值