android的窗口管理,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将事件派发到客户端的?

posted on 2010-11-24 18:28 calvin 阅读(2821) 评论(0)  编辑  收藏 所属分类: Android

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值