博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Activity Window View的关系
阅读量:6572 次
发布时间:2019-06-24

本文共 1487 字,大约阅读时间需要 4 分钟。

 

 

 

Activity Window View的关系

问题:

Activity是Android得显示视图么?

题目中它们之间的关系?

LayoutInlater()是做什么的?

layoutInflater.inflater()是做什么的?

 

1、PhoneWindow才是View真正的实例化方法

2、一个Activity构造时候会构造一个只有一个Phonewindow(窗)

3、这个窗口有一个ViewRoot(view, viewgroup),窗口可以贴很多装饰,用layout\layoutInflater

其实可以这么理解ViewRoot就像C盘,每个Activity创建的只有一个viewRoot哦!,然后下面的结构就是view啦

4、然后这个viewroot根会addView(viewgroup),可以直接setContentView()时候传入一个R.layout.ID,也可以用layoutInflater动态地生成这个view装饰体。

5、windowManagerService接受的消息,并且回调Activity函数

 

 


 

 

 

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

在addView里,会为每个view创建一个viewRoot(这是逻辑上的东西,用来负责view的事件处理和逻辑处理,并和WindowsManagerService建立联系),而在WindowManagerImpl里,会维护viewRoot的数组。

最终会调用ViewRoot.setView(),在setView里会显示该view等。在setView的实现里,会调用Session.add()来addWindow,通过这个方法,会将ViewRoot和WindowManagerService联系起来(比如说分发事件等),并且这个方法里会调用PhoneWindowManager.prepareAddWindowLw()。

调用过程如下:

ViewRoot.setView()->WindowManagerService.relayout()->WindowManagerService.relayoutWindow()->WindowManagerService.performLayoutAndPlaceSurfacesLocked()->WindowManagerService.performLayoutAndPlaceSurfacesLockedInner()->WindowManagerService.performLayoutLockedInner()->PhoneWindowManager.beginLayoutLw()

然后ViewRoot.setView()->WindowManagerService.finishDrawing()陆续又会调用到一些PhoneWindowManager里的layout方法。

对于WindowManager而言,只要调用了AddView,上述的流程都会走一遍。

对于一个Window而言,目前大概可以分为几个部分:statusbarview(0,0,320,25),应用的activity(0, 25,320,480)

 

转载地址:http://vrojo.baihongyu.com/

你可能感兴趣的文章
关于Integer类中parseInt()和valueOf()方法的区别以及int和String类性的转换.以及String类valueOf()方法...
查看>>
python之sys模块详解
查看>>
ios 控制器的生命周期
查看>>
C#动态代理
查看>>
认证 (authentication) 和授权 (authorization) 的区别
查看>>
快速配置 Samba 将 Linux 目录映射为 Windows 驱动器
查看>>
使用 sessionStorage 创建一个本地存储的 name/value
查看>>
POJ2127 LICS模板
查看>>
Python笔记8----DataFrame(二维)
查看>>
算法34----种花问题
查看>>
JavaScript 特殊效果代码
查看>>
【?】codeforces721E Road to Home(DP+单调队列)
查看>>
MySQL 仅保留7天、一个月数据
查看>>
LINUX 11G RAC ASM磁盘组在线增加磁盘扩容
查看>>
OGG 11g Checkpoint 详解
查看>>
迄今为止 .Net 平台功能最强大,性能最佳的 JSON 序列化和反序列化库。
查看>>
PHP中使用socket通信响应速度慢的原因与解决办法
查看>>
Python学习笔记<资源收录>
查看>>
Win7下安装Mysql(解压缩版)
查看>>
react-developer-tools
查看>>