鸣谢:
http://www.jianshu.com/p/810ecb80a96f
http://www.jianshu.com/p/28c5377c77c4
Demo地址:
https://github.com/jigongdajiang/FunDemo/tree/master
IPC
简写:Inter Progress Communication 进程间通讯/跨进程通讯 > Why?: Android 为了保证进程间互补影响,进行了进程隔离,保证每个进程都有一个独立的虚拟空间,但是进程间有时候又不可能没有交流,于是就有了IPC机制
What?: AIDL文件其实就是一种协议文件,一般规定了服务端具备的功能接口
服务端Service中返回IBinder对象为 AIDL文件生成Java文件后的内部类Sub
客户端bindService,在ServiceConnection中的连接成功方法中会返回一个IBinder对象,通过AIDL对应的java类的asInterface方法可以将IBinder转为AIDL对应的java类,通过这个类既可以调用服务端中提供的功能
源码:AIDL对应的Java文件架构
//其本身是个接口,里面有定义的功能方法 和一个 Sub内部抽象类
public interface UserAidl extends android.os.IInterface {
/**
* 内部类继承Binder 且实现了UserAidl 而Binder 实现了IBinder Binder中有一些Native方法
*/
public static abstract class Stub extends android.os.Binder implements gjg.com.fundemo.UserAidl {
//AIDL的唯一标示,用来供底层区分
private static final java.lang.String DESCRIPTOR = "gjg.com.fundemo.UserAidl";
/**
* stub与接口关联
*/
public Stub() {
this.attachInterface(this, DESCRIPTOR);
}
/**
* 这就是客户端连接成功后使用的方法,最终用来返回一个Proxy
*/
public static gjg.com.fundemo.UserAidl asInterface(android.os.IBinder obj) {