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 嵌套线性布局的资料请关注脚本之家其它相关文章!

相关文章

  • 使用RecyclerView实现水平列表

    使用RecyclerView实现水平列表

    这篇文章主要为大家详细介绍了使用RecyclerView实现水平列表,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-09-09
  • android双缓冲技术实例详解

    android双缓冲技术实例详解

    这篇文章主要介绍了android双缓冲技术实例详解,需要的朋友可以参考下
    2014-07-07
  • Android 自定义View的构造函数详细介绍

    Android 自定义View的构造函数详细介绍

    这篇文章主要介绍了Android 自定义View的构造函数详细介绍的相关资料,这里对构造函数进行了对比按需使用,需要的朋友可以参考下
    2016-12-12
  • Android UI组件Spinner下拉列表详解

    Android UI组件Spinner下拉列表详解

    这篇文章主要为大家详细介绍了Android UI组件Spinner下拉列表的实现方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-08-08
  • Android开发之使用ExifInterface获取拍照后的图片属性

    Android开发之使用ExifInterface获取拍照后的图片属性

    这篇文章主要介绍了Android开发之使用ExifInterface获取拍照后的图片属性,较为详细的分析了ExifInterface类操作图片的具体使用技巧,需要的朋友可以参考下
    2016-01-01
  • Android帧率监测与优化技巧

    Android帧率监测与优化技巧

    Android 应用的性能优化是开发过程中至关重要的一环,而帧率(Frame Rate)是评估应用性能的一个关键指标,在本文中,我们将深入探讨如何监测 Android 应用的帧率,以及如何通过代码示例来优化应用的性能,需要的朋友可以参考下
    2023-10-10
  • Android之线程池ThreadPoolExecutor的简介

    Android之线程池ThreadPoolExecutor的简介

    今天小编就为大家分享一篇关于Android之线程池ThreadPoolExecutor的简介,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • Android不同版本兼容性适配方法教程

    Android不同版本兼容性适配方法教程

    这篇文章主要介绍了Android不同版本兼容性适配方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2022-11-11
  • android播放视频时在立体声与单声道之间切换无变化原因分析及解决

    android播放视频时在立体声与单声道之间切换无变化原因分析及解决

    使用第三方视频播放器,有立体声与单声道之间切换,发现切换后无作用,原因是由于在HAL层默认没有处理上层发的stereo 转mono的命令,具体的解决方法如下
    2013-06-06
  • Android OnCreate()中获取控件高度与宽度两种方法详解

    Android OnCreate()中获取控件高度与宽度两种方法详解

    这篇文章主要介绍了Android OnCreate()中获取控件高度与宽度两种方法详解的相关资料,这里提供了两种方法,大家可以都看下,需要的朋友可以参考下
    2016-12-12

最新评论