Android嵌套线性布局玩法坑解决方法

 更新时间:2022年10月31日 15:59:34   作者:打哭廖廖  
这篇文章主要为大家介绍了Android嵌套线性布局玩法坑解决方法,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

前言

嵌套线性布局大家应该都用的非常熟悉,毕竟这玩意理解起来也是真的简单,而且如果熟悉的话这玩意开发起来的效率也是真的快,不用一下一下拖动。

但是这个玩意有个非常的问题,就是性能问题,而且人家性能问题是指数级别增加的,怎么回事呢,因为你如果一层一层的嵌套布局的话,系统在绘制的时候就是指数级别的绘制次数,如果你只是嵌套了俩层那都还能接受的玩,如果你一个界面控件很多,然后你又嵌套几层线性布局,那这个时候性能就十分低下了。

详解

  • 看下面的代码,就是一个十分典型的线性嵌套布局,用起来是很爽,无脑套,但是系统可不少受
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <LinearLayout
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
            <LinearLayout
                android:orientation="vertical"
                android:layout_width="match_parent"
                android:layout_height="match_parent">
                <LinearLayout
                    android:orientation="vertical"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent">
                    <LinearLayout
                        android:orientation="vertical"
                        android:layout_width="match_parent"
                        android:layout_height="match_parent">

                    </LinearLayout>
                </LinearLayout>
            </LinearLayout>
        </LinearLayout>
    </LinearLayout>

</FrameLayout>

为什么会让性能降低的怎么严重呢?

结论是绘制次数太多,主要是线性布局会造成这个问题,线性布局会对子view进行二次测量甚至三次测量。

比如:

1.LinearLayout宽度为wrap_content,因此它将选择子View的最大宽度为其最后的宽度

2.但是有个子View的宽度为match_parent,意思它将以LinearLayout的宽度为宽度,这就陷入死循环了

3.因此这时候, LinearLayout 就会先以0为强制宽度测量一下子View,并正常地测量剩下的其他子View,然后再用其他子View里最宽的那个的宽度,二次测量这个match_parent的子 View,最终得出它的尺寸,并把这个宽度作为自己最终的宽度。

4.这是对单个子View的二次测量,如果有多个子View写了match_parent ,那就需要对它们每一个都进行二次测量。

5.除此之外,如果在LinearLayout中使用了weight会导致测量3次甚至更多,重复测量在Android中是很常见的

所以我们的嵌套对性能影响是指数级别的,比如线性套线性套线性这种。

以上就是Android嵌套线性布局玩法坑解决方法的详细内容,更多关于Android 嵌套线性布局的资料请关注脚本之家其它相关文章!

相关文章

  • Android进阶之从IO到NIO的模型机制演进

    Android进阶之从IO到NIO的模型机制演进

    这篇文章主要为大家介绍了Android进阶之从IO到NIO的模型机制演进详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01
  • 基于自定义Toast全面解析

    基于自定义Toast全面解析

    下面小编就为大家带来一篇基于自定义Toast全面解析。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • Android实现页面跳转

    Android实现页面跳转

    这篇文章主要为大家详细介绍了Android实现页面跳转,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06
  • Android自定义View过程解析

    Android自定义View过程解析

    这篇文章主要针对Android自定义View过程进行解析,Android创建自定义的view,感兴趣的小伙伴们可以参考一下
    2016-01-01
  • Android编程之播放器MediaPlayer实现均衡器效果示例

    Android编程之播放器MediaPlayer实现均衡器效果示例

    这篇文章主要介绍了Android编程之播放器MediaPlayer实现均衡器效果,结合具体实例形式分析了Android调用MediaPlayer相关API构造均衡器的具体步骤与相关功能实现方法,需要的朋友可以参考下
    2017-08-08
  • Flutter里面错误捕获的正确方法

    Flutter里面错误捕获的正确方法

    这篇文章主要给大家介绍了关于Flutter里面错误捕获的正确方法,文中通过示例代码介绍的非常详细,对大家学习或者使用Flutter具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-10-10
  • Android自定义实现BaseAdapter的普通实现

    Android自定义实现BaseAdapter的普通实现

    这篇文章主要为大家详细介绍了Android自定义实现BaseAdapter的普通实现,感兴趣的小伙伴们可以参考一下
    2016-08-08
  • Crashlytics Android 异常报告统计管理(详解)

    Crashlytics Android 异常报告统计管理(详解)

    下面小编就为大家带来一篇Crashlytics Android 异常报告统计管理(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • Android仿支付宝密码输入效果封装

    Android仿支付宝密码输入效果封装

    这篇文章主要为大家详细介绍了Android仿支付宝密码输入效果的封装,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12
  • android中图形图像处理之drawable用法分析

    android中图形图像处理之drawable用法分析

    这篇文章主要介绍了android中图形图像处理之drawable用法,较为详细的分析了Android中绘图所涉及的各种常用技巧与方法,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-10-10

最新评论