Android View Window Activity WindowManager ViewRoot

  次阅读 作者:智能小宝 来源:互联网 2016-01-14 10:31 我要评论(0)

1)View:最基本的UI组件,表示屏幕上的一个矩形区域。

2)Window:表示一个窗口,不一定有屏幕那么大,可以很大也可以很小;它包含一个View tree和窗口的layout参数。Viewtree的root View可以通过getDecorView得到。还可以设置Window的ContentView。

3)Activity:Activity包含一个Window,该Window在Activity的attach方法中通过调PolicyManager.makeNewWindo创建

4)WindowManager:一个interface,继承自ViewManager。有一个implementation

5)class:android.view.WindowManagerImpl

其实WindowManager并不是整个系统的窗口管理器,而是所在应用进程的窗口管理器。系统全局的窗口管理器运行在SystemServer进程中,是一个Service。

ViewRoot通过IWindowSession接口与全局窗口管理器进行交互。将一个Viewadd到WindowManager时,WindowManagerImpl创建一个ViewRoot来管理该窗口的根View。并通过ViewRoot.setView方法把该View传给ViewRoot。

ViewRoot用于管理窗口的根View,并和globalwindow manger进行交互。ViewRoot中有一个nested class:W,W是一个Binder子类,用于接收global window manager的各种消息, 如按键消息, 触摸消息等。ViewRoot有一个W类型的成员mWindow,ViewRoot在Constructor中创建一个W的instance并赋值给mWindow。ViewRoot是Handler的子类, W会通过Looper把消息传递给ViewRoot。ViewRoot在setView方法中把mWindow传给sWindowSession。

ActivityThread.java中调用wm.addView(decor,l);把它加入到window manager proxy的mViews中,同时为这个decorview创建一个ViewRoot,ViewRoot负责协调decorview与window manager直接绘图、事件处理。

ViewRoot中有IWindowSession和IWindow用来和windowmanger打交道和接收window manager传过来的消息,消息传过来后ViewRoot分发给decorview,再由decor view进行分发

总之,每个窗口对应着一个Window对象,一个根View和一个ViewRoot对象。要想创建一个窗口,可以调用

WindowManager的addView方法,作为参数的view将作为在该窗口上显示的根view

一般来讲,Activity就是一个可视的人机交互界面。

每一个Activity都有一个默认的Window,一般来讲,这个Window都是全屏的,当然也有例外,比如Dialog的Window就是非全屏的。Activity也可以利用默认Window以外的其它的Window,比如弹出一个Dialog对话框。

Window里可见的内容,就是一层一层的View。Window里的View是通过setContentView这个接口set进去的,这个ContentView就是Window里处于最根部的View。

对于屏幕显示而言,整个是Activity其实确切的说是window,为什么这样说呢?

在Activityattach 函数里.有这样一句mWindow = PolicyManager.makeNewWindow(this);

这句是把Activiytwindow关联起来了.真正关联的是PhoneWindow.

这个window里显示的东西是view(activity是逻辑上的东西,增加了生命周期管理等.里面具体的东西也是view。而且启动activity的实现也是往window里加view),往window里加view,是通过调用WindowManager(WindowManagerImpl).addView()来实现的。

为什么可以这样说呢?

看public voidsetCo

本站文章信息来源于网络以及网友投稿,本站只负责对文章进行整理、排版、编辑,是出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如果您有什么意见或建议,请联系QQ28-1688-302!

人工智能实验室
相关文章相关文章
  • 未来两年人工智能要怎么走?看这篇就够了

    未来两年人工智能要怎么走?看这篇就够了

  • 英国研发“杀生”机器人 通过生命体获取能量

    英国研发“杀生”机器人 通过生命体获取能量

  • 韩春雨称已能重复实验结果 近期将有消息公布

    韩春雨称已能重复实验结果 近期将有消息公布

  • 无人驾驶汽车如何改变城市生活?听听他们怎么说

    无人驾驶汽车如何改变城市生活?听听他们怎么说

网友点评网友点评
阅读推荐阅读推荐

据国外媒体报道,在过去两年内,聊天机器人(chatbot)、人工智能以及机器学习的研发和采用取得了巨大进展。许多初创公司正利用人工智能和...

霍金 视觉中国 图 英国著名物理学家霍金(Stephen Hawking)再次就人工智能(AI)发声,他认为:对于人类来说,强大AI的出现可能是最美妙的...

文|郑娟娟 今年,人工智能(AI) 60岁了。在AI60岁的时候,笔者想要介绍一下AI100,一个刚刚2岁的研究项目,但它的预设寿命是100年,甚至更长...

AlphaGo与李世石的人机大战,为大众迅速普及了人工智能的概念。 但对谷歌而言,除了下围棋,现在的人工智能进展到哪一步了?未来,人工智能...