aidl

不同项目用aidl时要注意这四点:

1、service的启动方式:不能用隐式启动,会报错。应该这样:
aidl

2、实体类要放在java包下,而不能放在aidl包下,不然会报找不到这个类的错误。(其实同时aidl文件也不能放在java包下面,否则系统不能自动帮助我们生成java文件)
aidl

3、客户端和服务端的“和aidl相关的文件”的包名要一致,可以是任意包名。
aidl
比如这里:3个aidl文件和1个实体类,它们在客户端和服务端的包名都是“com.ryg.ppp”

4、服务端的进程要先开启,否则客户端绑定不了服务端的service。


另:
aidl生成的java类在这里
aidl
如果把aidl文件给删除了,那么生成的java类也就消失了。而且生成的java类是不能够修改的,即使你修改了,系统也会把它改回去。


总结:

1、其实“aidl生成的java类和与它们相关的实体类”就相当于第三方库,客户端、服务端各放一份,这样客户端和服务端调用的就是同一个东西。所以只要这些类的包名一致就可以了。可以和客户端或者服务端的项目名不同。

2、aidl只是生成binder类的工具,我们不用aidl,直接自己写binder类,并把自己写的这些类放在一个包里,客户端和服务端各放一份,就可以实现进程间通信,这也是aidl的本质。
aidl

3、binder的java类大致如下:
aidl

aidl

IBookManager:用来定义业务接口。并实现IInterface接口,让它可以在binder中传输
IInterface:所有在binder中传输的接口都需要继承IInterface接口
Stub最重要的。继承Binder,让它可以实现进程间通信。同时实现IBookMangager,让它可以拥有业务方法。
Proxy:Stub的内部类。内部封装的就是一个Stub对象。

生成的binder类java文件一定要结合艺术探索多看,理解透里面的方法。