Aidl和Messanger是Android 中常用的IPC方式。首先,Aidl内部是基于Binder的,而Messenger内部又是基于Aidl的。但是messenger和Aidl还是有所区别的。
学习Aidl的时候常会看到:
“Using AIDL is necessary only if you allow clients from different applications to access your service for IPC and want to handle multithreading in your service.”
而学习Messenger的时候:
“if you want to perform IPC, but do not need to handle multithreading, implement your interface using a Messenger.”
从这两句话可以看出Messenger和Aidl的最大区别在于多线程处理方面,事实上正是如此。
首先是Aidl的执行过程。

上图中ct代表客户端线程,bt代表BinderDriver线程。
首先是ct通过transact发送数据给BinderDriver,然后由bt线程去执行server端的方法。如果此时客户端有多个线程,那么BinderDriver 就会产生bt2,bt3…等等线程来执行Server端方法。此时线程是不同步的。
而Messenger恰恰就解决了线程同步的问题,那么是怎么解决的呢?


bt线程在执行的时候,调用handler.sendmessage方法发送消息到server端的MessageQueue中,然后server端的ActivityThread就去循环执行MessageQueue中的方法。尽管会有bt1,bt2…由于bt线程只是负责发送消息到server端的MessageQueue中,而server端的ActivityThread负责之一取出MessageQueue中的消息来逐一执行。因此,多线程模型就编程单线程模型了。

更多相关文章

  1. Nginx系列教程(二)| 一文带你读懂Nginx的正向与反向代理
  2. RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
  3. android中常用类及方法
  4. [Android]使用Dagger 2依赖注入 - 图表创建的性能
  5. android获取view宽高的几种方法
  6. 在 Android(安卓)Studio 中使用 Lambda 表达式的两种方法
  7. ------------------Android中对GridView, ListView等滚动控件的To
  8. android 基于基站,apn,gps,wifi,network 根据不同手机sim卡获取经
  9. Android系统添加Feature方法

随机推荐

  1. Android中Drawable适配介绍
  2. 【Android实战之旅 001】AsyncTask异步操
  3. Android中使用Handler和异步任务(AsyncTac
  4. Android是什么 之三-------手机之硬件形
  5. 【Android应用开发】分享一个录制 Androi
  6. 解读Android(安卓)LOG机制的实现
  7. 进程和线程模型(android)
  8. 从我的android说起
  9. android 可用内存的阀值--转载
  10. Android屏幕手势检测的实现代码