Android跨进程通信-Binder机制。
Android本身是基于Linux内核的,因为其移动系统内存小的原因,LInux的自身的跨进程通信的机制在Android设备上并不是很完美的适配,但是Linux有内核可加载模块,可以加载自定义的内核模块,所以Google就为Android设备定制了适合其的跨进程通信的机制-binder机制
Binder的跨进程通信,就是每个进程都会向ServiceManager注册,ServiceManager相当于通讯录,记录着每个进程的地址,而当Client进程想要和Server进程进行通信时,会先通过ServiceManager查询Server的地址,然后通过Binder驱动获取到Server的代理对象,通过代理对象,通过调用代理对象的方法来进行远程的调用Server的方法,这样就实现了跨进程的通信。当调用代理对象的方法时,会通过Binder驱动告知ServiceManger中的Server的对象,你的方法被调用了,然后间接的实现了跨进程的通信。
实现的原理是AIDL机制,通过阅读AILD编译后生成的代码,
asInterface会返回一个IBinder对象,判断是否是跨进程的通信,如果不是就返回本身的对象。
然后通过调用其对象的方法实现了跨进程的通信。
Android本身是基于Linux内核的,因为其移动系统内存小的原因,LInux的自身的跨进程通信的机制在Android设备上并不是很完美的适配,但是Linux有内核可加载模块,可以加载自定义的内核模块,所以Google就为Android设备定制了适合其的跨进程通信的机制-binder机制
Binder的跨进程通信,就是每个进程都会向ServiceManager注册,ServiceManager相当于通讯录,记录着每个进程的地址,而当Client进程想要和Server进程进行通信时,会先通过ServiceManager查询Server的地址,然后通过Binder驱动获取到Server的代理对象,通过代理对象,通过调用代理对象的方法来进行远程的调用Server的方法,这样就实现了跨进程的通信。当调用代理对象的方法时,会通过Binder驱动告知ServiceManger中的Server的对象,你的方法被调用了,然后间接的实现了跨进程的通信。
实现的原理是AIDL机制,通过阅读AILD编译后生成的代码,
asInterface会返回一个IBinder对象,判断是否是跨进程的通信,如果不是就返回本身的对象。
然后通过调用其对象的方法实现了跨进程的通信。