美文网首页
Android中Relativelayout和Linearlay

Android中Relativelayout和Linearlay

作者: A代码搬运工 | 来源:发表于2019-05-31 11:46 被阅读0次

    Android中Relativelayout和Linearlayout性能分析

    系统源码DecoreView ---> LinearLayout

    新建工程默认----> RelativeLayout

    View的基本工作原理:

    View是Android系统在屏幕上的视觉呈现,也就是说你在手机屏幕上看到的东西都是View.

    View

    View绘制流程

    View的绘制流程是从ViewRoot的performTraversals()方法开始,依次经过measure(),layout()和draw()三个过程才最终将一个View呈现出来.从ViewRoot的performTraversals()方法开始依次调用perfromMeasure,perfromLayout,perfromDraw这三个方法.其中perfromMeasure会调用measure,measure又会调用onMeasure,在onMeasure方法中则会对所有子元素进行measure,这时候measure流程就从父容器传递到子元素中,这样就完成了measure过程.接着子元素会重复父容器的measure,如此反复就完成了整个View树的遍历.performLayout和performDraw同理如此.

    View怎么呈现在页面上

    Android中的视图都是通过window来呈现的,不管是Activity,Dialog或者Toast它们都有一个Window,然后通过WindowManager来管理View,Window和顶级View---DecorView的通信都是依赖ViewRoot完成

    View和ViewGroup的区别

    View是一种界面层控件的抽象

    ViewGroup继承View,多个控件组成的控件组

    RelativeLayout对比LinearLayout主要慢在onMeasurce上

    RelativeLayout

    RelativeLayout会对子View做两次measure,因为RelativeLayout允许A,B 2个子View,横向上B依赖A,纵向上A依赖B。所以需要横向纵向分别进行一次排序测量。

    LinearLayout只会绘制一次如果不使用Weight,LinearLayout会在当前方向上进行一次measure过程,如果使用了Weight,LinearLayout会避开设置过Weight属性的View做第一次measure,完了之后再对设置过Weight属性的View做二次measure,由此可见,Weight属性对性能是有影响的。

    LinearLayout Linearlayout

    View的measure

    View

            如果我们或者我们的子View没有要求强制刷新,而父View给子View的值也没有发生变化,就不会做所谓的measure,但是Relativelayout做两次measure,在横向测量的时候,纵向测量还没完成,只有暂时使用myHeight传入子View,假设子View的Height不等于myHeight的高度,那么measure的优化就起不动任何作用.所以如果可以,尽量使用padding代替margin.

            View的measure优化还有一个就是有做缓存处理,会根据目前的测量规格生产的key索引缓存数据。如果缓存中有,就不会做measure处理。

    View

    文章主要内容摘自:https://blog.csdn.net/hejjunlin/article/details/51159419

    相关文章

      网友评论

          本文标题:Android中Relativelayout和Linearlay

          本文链接:https://www.haomeiwen.com/subject/ehrwtctx.html