AIDL中根目录自动生成的与aidl文件相对应的java类分析

我们写的aidl文件,系统adk会自动为我们在根目录中生成一个相应的java类文件,但是这个文件比较长,没有仔细关注过,现在对其中的内容进行一些分析:

首先整个文件是一个继承了IIterface的接口类,其中它的内容主要分为两个部分,一个是你在自己的aidl文件中声明的方法,另一个是一个抽象类stub。关于第一部分,两个方法只需要在这里声明一下就可以了,不需要具体的实现过程,主要关注点还是在第二部分。

这个抽象类Stub继承Binder类,并实现你写的aidl文件类,它其中又分为以下几个部分:

1.同在你的aidl文件中所声明几个方法所相对应的几个静态整型常量,用于表示这几个方法

2.一个静态常量:DESCRIPTOR

Binder的唯一标识,一般用你写的那个aidl文件类路径表示

3.一个无参的构造方法

将该类与你的aidl文件类相连接

4.asInterface()方法

通过DESCRIPTOR来查询客户端是否存在该aidl文件类对象,存在返回该对象,不存在就返回之后的Proxy类对象,也可理解成是否在同一个进程中,在就肯定存在该对象,不在就返回Proxy对象了

5.asBinder()方法

将当前对象转成Binder对象返回

6.onTransact()方法

该方法中主要存在两个部分,一个是根据所传入的整形参数code来进行判断执行操作的switch部分,还要一部分就是系统底层封装好的内容,直接调用父类的方法就行。其中switch部分,就是与上述第一点中相应的各个静态整型常量进行判断,然后通过data中取出相应的参数,来执行相应的操作,并把结果写入reply中,注意该方法需要布尔类型的返回值,如果客服端请求成功,就返回true,如果没有成功,才返回false,一般执行了操作的,无论有无结果,都是true。

7.同样实现你所写的aidl文件类的Proxy类

该类的结构其实和它的外部类Stub类似,它需要一个Binder对象,所以存在一个需要传入Binder对象的构造方法,和一个成员变量的Binder对象,同样也存在一个asBinder方法,用来返回这个成员变量,同时还需要一个getInterfaceDescriptor()方法来返回DESCRIPTOR,以上几个方法都是固定的格式的。至于之后的几个方法,取决于你写的aidl文件类中的方法,你的每一个方法都会存在一个对应的方法,其中的内容就是大致就是调用Binder对象的transact()方法,因为调用该方法是在线程中进行,所以注意需要加个try。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值