Android 窗口管理 Android 窗口管理
在整个控件树的最顶端,是一个逻辑的树顶,ViewParent,在源码中的实现是ViewRoot(ViewRoot extends Handler implements ViewParent)。它是整个控件树和WindowManager之间的事件信息的翻译者。WindowManager是Android中一个重要的服务。它将用户的操作,翻译成为指令,发送给呈现在界面上的各个Window。Activity会将顶级的控件注册到WindowManager中,当用户真是触碰屏幕或键盘的时候,WindowManager就会通知到,而当控件有一些请求产生,也会经由ViewParent送回到WindowManager中。从而完成整个通信流程。

事件分发流程
用户在触发一个时间后产生一个消息,消息先被window manager采集到,然后分发给client。
window manager通过IWindow分发给client,我们知道ViewRoot使用IWindowSession与server通讯,使用IWindow接收消息,所以第一步消息到了ViewRoot这里来了
也就是window manager->IWindow->ViewRoot
到了ViewRoot后它把消息转发给Looper(楼主可以看ViewRoot.java看它是怎么获取当前线程的Looper的)
Looper->ViewRoot$RootHandler().dispatch(),有转发会给ViewRoot,然后就通过decor view形成的树状结构依次分发下去。

window manager proxy中维护了view, ViewRoot, layout param三元组。
每次调用window manager proxy的addView都会新增一个三元组。一般程序中都是调用addView(decor,...),也就是只对decor view调用addView

*****************\
在Activity在performLaunchActivity时,会使用Activity.attach()建立一个PhoneWindow主窗口。这个主窗口的建立并不是一个重点。handleResumeActivity真正要启动一个Activity时候,将主窗口加入到WindowManager,当然并不是将主窗口本身,而是将主窗口的DecorView加入到WindowManager中。

• performLaunchActivity@ActivityThread.java
attach()@Activity.javaSession.java
addWindow()@WindowManager

mWindow = PolicyManager.makeNewWindow(this); --实例化一个activity或者dialog或者widget的地方才会make new window
• handleResumeActivity()@ActivityThread.java
addView()@WindowManagerImpl.java --添加DecorView到WindowManager中
setView()@ViewRoot.java
add()@IwindowSession.java
| --这里通过AIDL调用
add()@WindowManagerService$Service.java

关于PhoneWindow:
而PhoneWindow只是做了一个具体跟手机功能相关的公用事件的处理,所以在Android中PhoneWindow并不是一个抽象的纯正概念,而是一个跟手机系统相关的一个特别窗口概念,例如按键的默认动作处理,按键音的发出等等。

一个View对应一个ViewRoot

问题: WindowMangerService如果通过AIDL将事件派发到客户端的?

更多相关文章

  1. 系出名门Android(8) - 控件(View)之TextSwitcher, Gallery, Imag
  2. Android(安卓)菜单(OptionMenu)大全 建立你自己的菜单
  3. android:contentDescription 的用途
  4. Android基本功:Handler消息传送机制
  5. Android(安卓)开发学习小结(七)
  6. 《Android权威编程指南》挑战练习:定制 toast 消息
  7. Android布局--相对布局,RTL,用代码实现布局
  8. Android中Message机制的灵活应用(一)
  9. 修改android statusbar颜色

随机推荐

  1. Android SAX API XmlResourceParser及其
  2. Android + eclipse +ADT安装完全教程
  3. Android航班时刻查询
  4. Android三级目录、ListView单选/GridView
  5. EditView某些属性说明
  6. Android 5.0 Telephony关键类初始化和相
  7. Android原生(Native)C开发之九:OpenGL ES
  8. Android onActivityResult()不执行的几个
  9. Android的视频播放之VideoView与SurfaceV
  10. Android入门之helloworld