AIDL使用

AIDL使用总结

准备先从使用入手,之后再写分析。

1、在调用端(客户端) src目录下首先创建一个AIDL文件,在里面定义自己的方法,并重新编译,生成了一个对应的Java文件。

2、将客户端的AIDL文件拷贝到服务端(被调用端),这样的话客户端与服务端的包名以及类名都完全一样,并在服务端定义自己的服务,定义一个实现了SsoAuth.Stub的类,并在onBind中返回这个类的一个实例。在继承类的时候,定义对应的函数实体,试下IPC的真正调用。

3、在客户端启动并且绑定服务,定义自己的ServiceConnection的类,在OnServiceConneted中返回对应的SsoAuth.java的实例。通过SsoAuth.Stub.asIntrface的函数实现转换。

4、通过转换来的SsoAuth的对象在客户端实现对应函数的调用。

对应的分析:

1、主要的内容是SsoAuth.java中的这个Stub类,Stub是文件中静态的内部类,继承了Binder实现了对应的AIDL的接口。

2、asInterface函数是Stub中的函数,在这个函数中判断obj的类型,如果是本地接口就直接返回,如果不是本地接口的话就可以通过Proxy来包装对象,并将这个对象复制给Proxy的mRemote字段,返回一个Proxy的包装类。

3、在onServiceConneted(IBinder service)中service的这个字段是一个BinderProcy的类型,通过asInterface转换成一个Proxy类型。

通过以上这种方式就可以通过Binder机制进行传输,实现进程之间的调用。

你可能感兴趣的:(android)