性能优化之布局优化(代码片段)

一介闲休 一介闲休     2022-12-08     358

关键词:

谈到性能优化,一般都是从优化布局开始,优化布局一般可采用如下步骤进行:

Step1:进入系统设置打开调试GPU过度绘制功能,先定位存在重绘的布局;

Step2:对已定位存在过度重绘的布局,采用lint功能检测下,快速去掉冗余布局;

Step3:经过前两步后,如果还存在过度重绘,则采用hierarchy viewer进行深入研究

 

下面以Demo对上述三步进行详述:

要定位Demo中布局重绘情况,则先如图1所示开启“调试GPU过度绘制功能


图1

然后进入Demo应用查看重绘状态,如图2

图2

2显示Demo界面图标和文字都显示成红色,表示4X重绘说明存在严重重绘。关于不同颜色对应的重绘等级可参考图3

图3

找到布局存在问题后,则采用AS自带lint工具来检测布局,看究竟存在什么问题,如图4

图4

按图4操作完成后,则会出现如图5结果:


图5

按着图5检测结果,修改已存在问题如图6

布局文件修改前后对比

图6


修改后,再次执行Demo,以查看是否消除了重绘问题,结果如图7

图7


此时已将lint检测出的问题都已修复,但仍存在问题,那究竟问题出哪?(实际问题并非如Demo简单,这仅是通过简单问题说明解决问题的步骤),为进一步探究,就需要采用hierarchy Viewer来查看,如图8


图8


根据结果,很容易发现问题,此时TextView被三层ViewGroup包裹着,为解决此问题,探究具体布局以对问题进行修改,修改后布局如下:

<span style="font-size:18px;"><?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:padding="16dp"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:drawablePadding="3dp"
    android:drawableTop="@mipmap/ic_launcher"
    android:text="Hello World!" /></span>

这样修改后布局,如果在Activity正常显示出来,根据一般开发经验,这样用上去,显示的布局肯定与我们之前显示的不一样,那我们就对Activity的代码进行修改,此时我不采用setContentView,就采用LayoutInflater以将View层级降到最低,代码如下:

<span style="font-size:18px;">public class MainActivity extends Activity 

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        FrameLayout parentView = (FrameLayout) this.findViewById(Window.ID_ANDROID_CONTENT);
        parentView.setBackgroundColor(Color.parseColor("#000000"));
        LayoutInflater.from(this).inflate(R.layout.activity_main,parentView,true);
    
</span>

经过这番修改,再次检测布局的重绘情况,如图9所示:

修改布局后Demo结果验证图



图9

到此,已将优化布局的整个流程讲解完毕,以此为引,加以深入,完全可以写好层级最优的布局。



android性能优化之布局优化(代码片段)

...局树的层级(深度)过大那么会影响到View的显示性能并且内存占用会更大,用户看到的是界面显示不够流畅,所以我们可以通过减少布局树的层级来优化性能。在Android中我们可以使用XML或者也可以直接使用代码... 查看详情

ios之性能优化·uitableview深度优化(代码片段)

一、前言UITableView的优化主要从四个方面入手:提前计算并缓存好高度(布局),因为tableView:heightForRowAtIndexPath:是调用最频繁的方法;滑动时按需加载,防止卡顿。这个在大量图片展示,网络加载的时... 查看详情

android性能优化之绘制优化(代码片段)

前言前一段时间,笔者带大家一起深入探索Android布局优化和深入探索Android卡顿优化,内容难度比较大,因此,本篇文章就是上述两篇文章的基础篇,掌握这篇文章的知识后,阅读上面两篇文章的难度会小... 查看详情

android性能优化(代码片段)

Android性能优化:布局优化内存优化APK瘦身布局优化工具:LayoutInspector(AndroidStudio->Tools->Android->LayoutInspector)说明:通过该工具,可以截取到当前页面的布局树,从根目录DecorView开始,很清晰明了的显示出来了布局深度,可... 查看详情

androd性能优化之布局优化(代码片段)

Android的布局管理器本身就是个UI组件,所有的布局管理器都是ViewGroup的子类,而ViewGroup是View的子类,所以布局管理器可以当成普通的UI组件使用,也可以作为容器类使用,可以调用多个重载addView()向布局管理... 查看详情

android性能优化—布局优化技巧(代码片段)

...理管理内存,app的优化启动的方式来提升应用程序的性能。实际上界面布局也会对应用程序的性能产生比较大的影响,如果布局写得嵌套多,重复布局多次出现,一个小的布局利用很多控件 查看详情

android性能优化-卡顿和布局优化(代码片段)

文章目录1.卡顿分析1.1刷新率1.2PerfDog1.3CPUProfile2.布局优化2.1过度绘制2.2解决过度绘制2.3层级优化2.4使用merge2.5ViewStub3.其他优化3.1不要在onDraw里创建对象3.2异步加载布局参考文章布局可以说是APP最重要的一项了,用户感知极强&... 查看详情

android性能优化之内存泄漏检测以及内存优化(下)(代码片段)

...析一下Android内存优化的相关内容。  上篇:Android性能优化之内存泄漏检测以及内存优化(上)。  中篇:Android性能优化之内存泄漏检测以及内存优化(中)。  下篇:Android性能优化之内存 查看详情

前端性能优化之请求优化(代码片段)

...体验是一件永无止境的事情,没有最优,只有更优。前端性能优化方向有很多,今天主要讲解在网络请求上的优化。因涉及的优化方向较多,对于具体细节不再赘述。总体按以下三个方向优化:请求数据控制请求体积减少请求尽... 查看详情

android性能优化:这是一份详细的布局优化指南(含标签includeviewstubmerge讲解)(代码片段)

前言在Android开发中,性能优化策略十分重要本文主要讲解性能优化中的布局优化,希望你们会喜欢。#目录1.影响的性能布局性能的好坏主要影响:Android应用中的页面显示速度2.如何影响性能布局影响Android性能的实质&... 查看详情

android面试之必问性能优化(代码片段)

...够,因为不管是工作还是面试,都需要开发者懂得大量的性能优化,这对提升应用的体验是非常重要的。对于Android开发来说,性能优化主要围绕如下方面展开:启动优化、渲染优化、内存优化、网络优化、卡顿检测与优化、耗... 查看详情

android性能优化之启动优化(代码片段)

Android性能优化之启动优化1.启动窗口优化Android系统在Activity的窗口尚未启动完成前,会先显示一个启动窗口(StartingWindow),等界面的第一帧渲染完成后再从启动窗口切换到真正的界面显示,启动窗口通常情况... 查看详情

android性能优化之启动优化(代码片段)

Android性能优化之启动优化1.启动窗口优化Android系统在Activity的窗口尚未启动完成前,会先显示一个启动窗口(StartingWindow),等界面的第一帧渲染完成后再从启动窗口切换到真正的界面显示,启动窗口通常情况... 查看详情

android性能优化之内存泄漏检测以及内存优化(中)(代码片段)

...,和Android的内存优化相关内容。  上篇:Android性能优化之内存泄漏检测以及内存优化(上)。  中篇:Android性能优化之内存泄漏检测以及内存优化( 查看详情

android面试之必问性能优化(代码片段)

...;因为不管是工作还是面试,都需要开发者懂得大量的性能优化,这对提升应用的体验是非常重要的。对于Android开发来说,性能优化主要围绕如下方面展开:启动优化、渲染优化、内存优化、网络优化、卡顿检测... 查看详情

(转)foundation-性能优化之nsdateformatter(代码片段)

性能优化之NSDateFormatter为什么要优化NSDateFormatter?首先,过度的创建NSDateFormatter用于NSDate与NSString之间转换,会导致App卡顿,打开Profile工具查一下性能,你会发现这种操作占CPU比例是非常高的。据官方说法,创建NSDateFormatter代价... 查看详情

布局优化之viewstub源码分析(代码片段)

源码分析1@RemoteView2publicfinalclassViewStubextendsView3privateintmInflatedId;4privateintmLayoutResource;56privateWeakReference<View>mInflatedViewRef;78privateLayoutInflatermInflater;9privateOnInf 查看详情

布局性能优化:安卓开发者不可错过的性能优化技巧(代码片段)

今天总结一下布局的性能优化,这是一个系列,上一篇是#内存泄漏大集结:安卓开发者不可错过的性能优化技巧也可以看性能优化专栏里的记录,都是非常好的开发经验。当我们开发Android应用时,布局性能优... 查看详情