【Android源码 栏目提醒】:网学会员,鉴于大家对Android源码 十分关注,论文会员在此为大家搜集整理了“Android手机开发(二)共7 其00003 - 讲义教程”一文,供大家参考学习!
ViewRoot实际是一个HandlerViewRoot建立主View与WindowsManger通讯的桥梁。
ViewRoot在本质上一个Handler。
我们知道Handler的基本功能就是处理回调发送消息。
Activity在使用getSystemService获取WindowManagerImpl建立了一个WindowManagerImpl实例即WindowManager服务的代理wmWindowManagerImplcontext.getSystemServiceContext.WINDOW_SERVICE并调用wm.addview添加窗口到WMService中。
这个过程在客户端建立了什么样的管理框架并如何这个会话在WindowManagerProxy中建立了ViewLayoutViewRoot三者的对应关系表。
构造一个ViewRoot就会打开一个session并利用IWindowSession建立会话上下文。
4WindowManagerService本次对于WindowManagerService的研究仅限于FocusWindow消息系统。
其他的部分将在后面的专门章节讨论。
WindowManager管理的窗口是应用程序的Top-level窗口我这里参照Window的概念叫主窗口。
主窗口为什么要放在在Service这边来管理呢为什么不放在Client那边主窗口放置在一起管理是为了计算Z-order序列根据应用程序的状态来显隐应用程序的窗口。
我想
Android设计者在考虑设计窗口系统的时候一定首先考虑窗口z-order序的管理活动窗口的计算及其变化通知窗口归属属于哪个应用输入法管理WindowService大体上实现了如下的功能1Z-ordered的维护函数2输入法管理3AddWindow/RemoveWindow4Layerout5Token管理AppToken6活动窗口管理FocusWindow7活动应用管理FocusAPP8转场动画9系统消息收集线程11系统消息分发线程在服务端的窗口对象叫做WindowState。
在Service维护了一个mWindow数组这个mWindow就是Window的Z-order序数组。
mWindowMap用于记录。
WindowState有一个叫做mClient成员变量来记录客户端IWindow实例通过IWindow接口实例Service可以访问客户端的信息说以IWindow是Service连接View桥梁。
1FocusWindow活动窗口如何计算基本原理就是查找前景应用FousActivity并同Z-Order序中找出属于该FousActivityAppToken的主窗口这个窗口就是计算出来的FocusWindow。
2为什么要提出Token这个概念呢一个应用程序要管理自己的窗口那么如何来标识该窗口是属于某个ActivityAndoid设计者提出了AppToken这个概念。
AppToken在本质上的描述通过Token找到属于该Token的allWindows。
使用Token开始完成该应用程序的所有窗口的显示和隐藏。
3系统消息收集与处理我们下面重点研究中的系统消息收集模式及其分发模式。
使用作为专门的消息队列。
eyEventTouchEventTrackballEvent系统有两个线程KeyQ线程通过Navite函数readEvent轮询设备将读取的结果放置在KeyQ队列中。
系统dispatcher等待在KeyQ消息队列上一旦从消息队列中获取到消息就通过分发函数通过mClient传递到Client端。
14.AndroidGWES输入系统篇依照惯例在研究
Android输入系统之前给出输入系统的本质描述从哲学的观点来看输入系统就是解决从哪里来又将到哪里去问题。
输入的本质上的工作就是收集用户输入信息并放置到目标位置。
Android在源代码分类上并没有输入系统分类。
本章的输入系统研究是一个综合的分析前面的GWES的分析特别是View的FocusPath以及WindowManagerProxy是本章分析的基础如果没有理解请参阅前面的窗口管理的相关章节。
Android输入系统的组成
上一篇:
Android 的照相机系统
下一篇:
7*30m公路预应力混凝土连续梁桥上部结构设计