3. SurfaceFlinger和EventThread的工作流程说明

在SF的readyToRun函数中,将通过MesssageQueue的setEventThread函数建立SF和ET的关系。看看代码吧: void MessageQueue::setEventThread(const sp<EventThread>& eventThread) { mEventThread = eventThread; mEvents = eventThread->createEventConnection(); mEventTube = mEvents->getDataChannel(); mLooper->addFd(mEventTube->getFd(), 0, ALOOPER_EVENT_INPUT, MessageQueue::cb_eventReceiver, this); } 也就是说,当EventThread有什么鸟事的时候,都会通过cb_eventReceiver回调到SF线程。 注意:JB以前,Android老是喜欢用pipe作为进程间通信的手段,现在改成socketpair了。这是一个很大的变化。所以,会网络编程的同学可以happy一下了。不会的淫,也无所谓,反正是把socket当pipe来使,都是IPC通信手段,你管它用得是什么呢! EventThread的requestSync被调用后,会触发EventThread的线程通过Connection发送一个消息给SF所在的线程,即刚才那个cb_eventReceiver被调用,图4是此后的工作流程。(SF系统现在变得也是磨磨唧唧了,不懂POSIX编程屌丝们,你们无论如何得花点功夫研究了。)


更多相关文章

  1. android servicemanager与binder源码分析三------如何进入内核通
  2. Android开源项目发现--- 工具类依赖注入DI篇(持续更新)
  3. 疯狂android讲义---Configuration
  4. Android(安卓)c和c++函数调用堆栈分析
  5. Android(安卓)Camera HAL设计初步
  6. 推出Android原生开发工具包r16
  7. android 子线程 UI线程(主线程)通信
  8. Android必备的Java知识点
  9. android之widget详解

随机推荐

  1. Android设置默认Launcher
  2. 第一篇:小程序之语法篇
  3. android 自定义view绘制流程
  4. Android系统信息获取 之四:系统语言信息获
  5. Android使用Parcelable传递对象方法及注
  6. 为什么Android必须在主线程更新UI?
  7. Android -- ContentProvider的使用及需要
  8. android摄像头获取图像——第二弹
  9. ubuntu下安装android ADT 插件
  10. 第二章:根据oschina开源的app代码快速构建