今日总结一下布局的功能优化,这是一个系列,上一篇是# 内存走漏大集结:安卓开发者不可错过的功能优化技巧 也能够看功能优化专栏里的记载,都是非常好的开发经验。

当咱们开发Android运用时,布局功能优化是一个必不可少的进程。一个高效的布局能够进步用户体会,使运用更加流通、呼应更加迅速,而低效的布局则会导致运用的运转变得缓慢,乃至呈现卡顿、溃散等问题,影响用户体会。在开发中,布局优化不只需求考虑到UI规划的漂亮性和易用性,还需求重视布局的功能,防止呈现因视图过多、嵌套过深、图片过大等问题导致的功能瓶颈。经过对布局进行优化,能够显著进步运用的功能和用户体会,削减运用的CPU和内存占用,加速运用的启动和呼应速度,降低运用的耗电量,然后进步运用的稳定性和可靠性。

布局功能优化关于进步Android运用的质量和竞争力是至关重要的。在实践开发中,咱们需求依据详细的事务场景和规划要求,结合布局优化的最佳实践,逐步提高运用的布局功能,为用户带来更好的体会。

布局为什么会有功能问题呢

那需求了解一下Android View的烘托机制,Android烘托机制是指Android体系中用于显示界面的工作流程。它包含视图树的构建、丈量、布局和制作四个进程。

他们的大致流程是

graph TD
构建视图树 --> 丈量 --> 布局 --> 制作
  1. 构建视图树(View Hierarchy):在运用启动时,Android体系会依据布局文件中界说的View、ViewGroup和其他组件创立一个视图树。视图树是依据xml进行解析的。
  2. 丈量(Measure):在丈量进程中,体系会遍历视图树,并计算每个视图的巨细和方位
  3. 布局(Layout):在布局进程中,体系会依据视图树中每个视图的丈量成果,确定每个视图的巨细和方位,并将其放置在正确的方位上
  4. 制作(Draw):在制作进程中,体系会遍历视图树,并将每个视图制作到屏幕上

在这几个进程中,布局进程是比较耗费时刻的,并且耗时与视图树的杂乱程度成正比。

杂乱的布局指的是树联系的杂乱,而不是元素的杂乱。

不一样的视点

从体系视点剖析,Android体系的UI界面是依据视图层次结构(View Hierarchy)构建的,每个UI元素都是View或ViewGroup对象的实例,这些对象依照它们在界面中呈现的顺序排列,构成了一个视图层次结构。在这个结构中,每个UI元素都有自己的父元素和子元素,因此构成了一个树形结构。这个树形结构的根节点是一个ViewGroup对象,它是整个视图层次结构的根。

当用户进行交互操作时,Android体系需求对视图层次结构进行更新,例如重新布局、重绘等操作,这些操作会耗费很多的CPU和内存资源。因此,视图层次结构的构建对运用程序的功能和呼应速度至关重要。

常见布局解析,用对了,你的功能问题会削减很多

咱们从开始学习Android就知道五大布局是Android的布局根底,大家还记得他们的优缺点吗?之所以有五大布局,便是因为他们运用场景各不相同,然而有时候写法便是上来就相对,别的不考虑,这正确吗?

这是一个比照表格,加色彩的,年龄小的程序员或许都不知道。

布局性能优化:安卓开发者不可错过的性能优化技巧

经过这个比照,你会发现,每一个布局都有它的用途,要是用对了,在功能方面都有提高。也不是说用束缚布局一撸到底,在有些专场的场景中,对应的布局更加优于束缚布局。

回顾完之后,咱们看看开发中还有哪些影响功能的写法。

常见的开发中有损布局功能的操作方式

嵌套层数过多

当一个布局容器包含多个子布局容器时,会导致视图层次结构的深度添加,然后添加了CPU和内存资源的耗费

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

内存运用过高

当一个布局容器包含很多的子视图时,会导致内存占用过高,然后影呼运用程序的功能

<RelativeLayout
    >
    <ImageView
         />
    <ImageView
        />
    <ImageView
        />
</RelativeLayout>

不适宜的布局容器

在布局中挑选适宜的布局容器能够防止不必要的布局操作和内存耗费(当需求显示很多的数据列表时,运用ListView或RecyclerView等容器能够防止不必要的视图更新和内存耗费)

过多的重绘操作

当一个布局容器中包含多个视图时,每次修正其间一个视图的特点,都会导致整个布局容器的重绘操作

能够运用ViewStub元从来推迟加载杂乱的视图。

不合理的布局特点

在布局中挑选适宜的布局特点能够防止不必要的视图更新和内存耗费

在运用RelativeLayout布局容器时,它的丈量和布局都需求参考父、兄等原则,所以需求考虑到视图的相对方位和巨细,以防止不必要的布局操作和内存耗费。

运用无效的布局容器

在布局中运用无效的布局容器会添加不必要的布局操作和内存耗费,影呼运用程序的功能和呼应速度

<TableLayout
    >
    <TableRow
        >
        <TextView
             />
        <TextView
             />
    </TableRow>
    <TableRow
        >
        <TextView
             />
        <TextView
             />
    </TableRow>
</TableLayout>

这种操作在开发中还是比较常见的,有时候为了给Text View或许ImageView 添加点击区域,外边搞一个FragmeLayout。这种操作会导致内存耗费过高的。

常见的检测布局功能东西

  1. Hierarchy Viewer东西:Hierarchy Viewer东西能够协助开发者剖析运用程序的视图层次结构,找出或许存在的功能问题。在Hierarchy Viewer中,能够检查运用程序的视图层次结构,以及每个视图的制作时刻、丈量时刻和布局时刻等功能指标。
  2. TraceView东西:TraceView东西能够协助开发者剖析运用程序的功能问题,包含布局功能问题。在TraceView中,能够检查运用程序的办法调用链和执行时刻等信息,以及每个办法的CPU运用率、内存耗费等功能指标。
  3. UI功能剖析器:Android Studio中内置了UI功能剖析器,能够协助开发者剖析运用程序的UI功能问题,包含布局功能问题。在UI功能剖析器中,能够检查运用程序的烘托时刻、FPS、布局时刻等功能指标,并依据功能指标剖析运用程序的功能问题。
  4. Monkey测验东西:Monkey测验东西能够协助开发者测验运用程序的稳定性和功能问题,包含布局功能问题。在Monkey测验中,能够模仿用户随机点击和滑动操作,以测验运用程序的稳定性和呼应速度,一起能够经过TraceView等东西剖析运用程序的功能问题。(提前做好监测的买点,trace搜集,然后用monkey测验,最终剖析trace)

总结

1.削减布局层次

布局层次越深,制作所需的时刻就越长,因此应该尽或许削减布局层次。能够经过运用 ConstraintLayout 或许自界说 View 来削减布局层次。

2.运用适宜的布局容器

应该挑选最适合当时布局需求的布局容器,防止运用过于杂乱的布局容器,比方 LinearLayout 嵌套多层、RelativeLayout 的多重嵌套等。

3.运用 ViewStub 来推迟加载视图

假如布局中包含杂乱的视图,能够考虑运用 ViewStub 来推迟加载这些视图,以削减布局的加载时刻。

4.防止运用过多的嵌套布局

嵌套布局会添加布局的杂乱度,导致烘托时刻变长。因此应该尽量防止过多的嵌套布局。

5.运用适宜的布局特点

合理运用布局特点能够让布局更加简洁、高效,比方运用 match_parent 和 wrap_content 来代替详细的像素值。

6.防止在布局文件中运用过多的 include 标签

include 标签能够重复运用布局,但是过多的运用会添加布局层次和烘托时刻,因此应该尽量防止在布局文件中运用过多的 include 标签

主要是要弄理解布局的运用场景,从这几个坑出发,写代码的时候上点心。

别的学习束缚布局有一个很好的博客推荐大家# 万字长文 – 史上最全ConstraintLayout(束缚布局)运用详解