AG亚游集团 >Android相关

Android里应用程序,应用程序窗口和视图对象之间的关系

2018-11-28 10:32 编辑: Gboy 分类:Android相关 来源:CSDN

很久没更新博客了,在新博客里打算对android的view的绘制机制进行全方位分析,由于涉及到的范围相当之广(比消息机制里涉及到的还多,简直可怕),因此打算先来个总序来说清楚应用程序(activity),应用程序窗口(window)和视图对象(view)之间的关系,方便读者对接下来的博客(view的绘制)能更好地理解,这就是这篇博客的目的。


在Android里, 每一个Activity组件都有一个关联的Window对象,用来描述一个应用程序窗口。每一个应用程序窗口内部又包含有一个View对象,用来描述应用程序窗口的视图。应用程序窗口视图是真正用来实现UI内容和布局的,也就是说,每一个Activity组件的UI内容和布局都是通过与其所关联的一个Window对象的内部的一个View对象来实现的。


先来张图理一下(从其他博客里盗用的图):



对于window,DecorView,view,viewGroup,windowMnager和viewRoot的关系如下:


   1.每个主窗口中都有一个view,称之为decorview,是主窗口中的顶级view,实际上是viewGroup,viewGroup又是对一组view的管理,因此在viewGroup中建立了所有view的关系网,那么是如何实现的呢?是因为在view中有两个成员变量叫做mParent,mChildren,它们就是用来管理view的上下级关系的。而最终viewGroup附属在主窗口上,这样就很容易实现在窗口中通过findViewById找到具体的view了。当然,view的事件处理也是根据这个路径来处理的。


   2.windowManager主要是用来管理窗口的一些状态,属性,view增加,删除,更新,窗口顺序,消息收集和处理等等。windowManager继承自ViewManager.里面涉及到窗口管理的三个重要的方法,分别是:addView(),updateViewLayout(),removeView(),在windowManager中还有一个静态类layoutParams,通过它可以设置和获得当前窗口的一些属性。首先来看看addView()方法,在该方法中,会利用layoutParams来获得window中的view的一些属性,并为每个window创建viewRoot,viewRoot是view和windowManager之间的桥梁,真正把view传递给windowManager的是通过viewRoot来实现的(setView()方法)


  3.ViewRoot相当于是MVC模型中的Controller.实际上,ViewRoot继承自handler,因此也实现了view和windowManager之间的消息传递,窗口中的view的事件处理,消息发送,回调事件等都将通过ViewRoot来处理。


   4.当activity对象被创建完毕之后,会在PhoneWindow中生成一个DecorView,DecorView是一个窗口的顶级容器,其本质是一个FrameLayout,同时会创建ViewRootImpl(ViewRoot的实现类)对象,并将ViewRootImpl与DecorView建立关联:


 public void reportActivityRelaunched({
        if (mDecor != null && mDecor.getViewRootImpl() != null) {
            mDecor.getViewRootImpl().reportActivityRelaunched();
        }
    }

View的绘制流程从ViewRoot的performTraversals方法开始,经过measure、layout、draw三大过程完成对一个View的绘制工作。peformTraversal方法内部会调用peformMeasure、peformLayout、peformDraw这三个方法,这三个方法内部又分别调用view的Measure、Layout、Draw方法。 

--------------------- 

作者:_花开满楼 

来源:CSDN 

原文:/blog0686csdn0686net/qq_28269905/article/details/70895269 

版权声明:本文为博主原创文章,转载请附上博文链接!


搜索CocoaChina微信公众号:CocoaChina
微信扫一扫
订阅每日移动开发及APP推广热点资讯
公众号:
CocoaChina
上一篇:安卓明年2月起收费,对中国手机厂商影响有多大?
下一篇:不使用第三方框架编写的多线程断线续传功能
我来说两句
发表评论
您还没有登录!请登录注册
所有评论(0

综合评论

相关帖子

sina weixin mail 回到顶部
郝正鑫:黄金迎来超级周 伦敦金多空将进行最终对决 皇马天选之人只花费350万欧 拜仁高层都对他服气 媒体:朝鲜废弃核试验场 对中国东北是重大利好 天体低消额度升级!连两场净胜4+ 这攻击力谁不服 从南极跑到北极 这个中国跑者要疯狂一把 菲总统府:中菲将在礼乐滩合作开发油气资源 专访|林钰鑫:奥古斯塔一年级生 要与达斯汀PK距离 易信金融:非农大好但薪资数据令失望 美元又遭滑铁卢 美称印控克什米尔爆发激烈冲突 造成至少15人死亡 曝穆勒缺席拜仁本周训练 或因病缺席德国杯决赛 2018国际军事比赛首日 这个项目中国队无悬念夺冠 英国为硬脱欧制订应急计划:必要时动用军队
长春机场被指数架飞机尾部冒蓝烟 回应称正常现象 保罗恐怕是又打不了西决了!不信你看看这原因 会上被带走的官员都有谁?他被带走时“吓瘫” 日本朝日新闻批评美英法空袭叙利亚:不合法不负责 星阵授先第30局战罢 孟泰龄及时止损但形势已非 现在去香港打疫苗 打得上吗? 拼多多算不算传统电商行业真正颠覆者 王毅谈“印太”战略:一时引人耳目 转瞬归于平寂 “手机百度”更名“百度” 百家号推百万年薪计划 穆古亮相奥斯卡红毯 和科比艾玛斯通同框(图) [新浪彩票]足彩18035期冷热:多特受困双线恐连败 贵州松桃“锰三角”留千万吨锰渣 村民趟水起红疹
进球gif-幸运!主裁误判送点球 胡尔克一蹴而就 母女闯他人婚宴谎称男方亲友:蹭吃蹭喝疯狂打包 富太太赴同学会恋上校草 因一条神秘短信陷入噩梦 巴克莱称中美不会爆发贸易战:经济不错 关系走上正轨 十三届全国人大一次会议发布会 发言人都说了啥 入场线上交易战 大搜车1%佣金战能挺多久 山东科大原校长任廷琦受贿案开庭 被控受贿781万 印越将首次双边海军演习 印媒:印“东进”重大1步 穆帅:不是没用好博格巴 而是他得在英超尽全力 最有前景的十大行业 适合白手起家的项目 养20头牛一年赚多少钱 加盟店排行榜 AG亚游集团