androidbinder与handler的简要理解

android的进程之间的通信 采用binder机制,我们先弄明白binder到底是什么。

创新互联建站是一家集网站建设,贡觉企业网站建设,贡觉品牌网站建设,网站定制,贡觉网站建设报价,网络营销,网络优化,贡觉网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。

其实binder属于一个驱动,位于linux内核层,它的作用是完成进程间的通信。

而binder机制包括4个方面,分别是client(客户端),service(服务端),servicemanager(一个系统服务),binder驱动,

下面用一张图来表示它们的关系:

android  binder与handler的简要理解

可以看到 client,service,和servicemanager都运行在用户空间,binder驱动则运行在内核空间,现在简单的分析一下各个部分,首先是client,一般就是我们的activity,service则是我们进行想要通信远程服务。

servicemanager是一个守护进程,负责管理服务,所有的service都需要想它进行注册,在binder机制中它给client提供查询和获取service的接口.

最后是binder驱动,它是一个字符设备驱动,client和service通过open()和ioctl()2个文件操作函数与它进行通信,从而实现了client向service发出请求,而service处理请求将并返回给client,简单的说binder驱动就是提供了一切的底层支持。

理论说了那么多,现在简单说一下,如何使用binder机制进行通信,分为以下几个步骤:

1 获取ServiceManager的对象引用

2 注册我们的Service

3 在client中通过ServiceManager获取Service对象的引用

4 在client中发送请求,service中返回结果。

关于binder机制就讲这么多了,具体可参照下面这篇文章:

http://blog.csdn.net/yueliangniao1/article/details/7188549

接下来是android种handler机制的简单理解。handler机制用于线程之间的通信,巧合的是线程通信机制也恰好由4个部分组成分别是:

1 looper 一个线程可以产生一个looper对象(不一定每一个线程都会有,得有相应的操作才行),负责管理该线程的消息队列

2 handler 我们可以构造一个handler对象来与looper对象进行沟通,实现push新的消息进入消息队列,或是获取looper从消息队列中取出的消息

3 MessageQueue(消息队列)存放线程放入的消息

4 Message 消息对象

线程就是通过这4个部分来负责通信的,下面提供一张图来表示它们之间的关系:

android  binder与handler的简要理解

handler机制一般用于更新UI,应用程序启动的时候,将会创建一个主线程,主线程也就是所谓的UI线程,通过handler机制则子线程可以更改程序的UI。相关信息可以参考下面这篇文章:

http://blog.sina.com.cn/s/blog_8e1ceddc0101g6ao.html

一起学习,有错误请指出


当前标题:androidbinder与handler的简要理解
网站链接:http://ybzwz.com/article/igsisg.html