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

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

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

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

可以看到 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个部分来负责通信的,下面提供一张图来表示它们之间的关系:

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


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


一起学习,有错误请指出

更多相关文章

  1. Android振动系统学习
  2. Android——IPC机制(一)IPC概念以及Binder机制
  3. android两个子线程间通信
  4. 如果我是Android面试官九
  5. Android中的UI线程详解
  6. android连续调用setVisibility(View.VISIBLE)和setVisibility(Vi
  7. android用jdbc多线程操作sqlite小结
  8. Android多线程(三)HandlerThread源码原理解析
  9. [置顶] android ANR

随机推荐

  1. android 布局简括
  2. ProgressBar属性小结(转载)
  3. Android(安卓)异步加载图片
  4. android 注册、登录实现程序
  5. asdasdas
  6. android 表单布局 左右布局
  7. Android中attr自定义属性详解
  8. Simple Gestures on Android
  9. Android(安卓)读取和保存文件(手机内置存
  10. Android的数据库--sqlite(一)