纯属自己理解,错了表pia我。
service manager
binder驱动
server
service
client
BpXXX
BnXXX
1,service manager一个进程,整个android系统里面只有一个servicemanager,管理所有服务。
他自己本身也是服务,而且他在binder驱动里的id=0。是一个特殊的服务。
2,binder驱动是作为通讯用的一个机制,比起socket通讯优势主要在于可以一次复制就能传递所需要的内容。
3,service不是进程也不是线程,当然他可以是在一个进程或者线程当中工作,他的工作就是在底层运行一些功能。核心层的服务都是进程里的(init.rc),java层的服务默认都在server那个主线程里(但是也可以重开进程或者线程让那个服务在里面工作)。
4,client是通过查询servicemanager->binder来知道到底有没有这个服务,之后在调用这个服务。
5,BpXXX是用在客户端,客户端调用ontransact跟binder通讯,但是它没有实际调用,而是让IPCThreadState做。
6,BnXXX用在服务器端。
阅读(2719) | 评论(0) | 转发(0) |