android app性能优化_Android 布局 性能优化

面试的时候经常会用到布局优化,其实布局优化相对来说是比较简单的, 我也搞不懂很多人就喜欢问,问就问吧,这里本篇文章今天就来跟大家分析一下如何进行布局优化

一.为什么要布局优化

界面卡顿,或者界面元素太多太复杂了,导致UI卡顿,这就是我们需要优化的理由,其实很少有人会去管这个布局优化的,除非一些高复杂的页面,比如抖音的主页,这种高频率使用的页面

二.如何检测布局

我们可以使用SDK中的工具Hierarchy View,也可以使用Android Studio 中的 Layout Inspector,点击菜单栏 Tools 中即可看到

0320eade64f442fa4ad976963323cd0f.png

这里要注意的一点就是要先运行App,再执行Layout Inspector才能选择进程

6edcc4f7f90df1fb3d8a427dd8b41277.png

当然,这个就是从结构层来表示了,一般我们看一眼也大概知道是怎么回事了,我们再来看下Hierarchy View ,Hierarchy View 在新版本的SDK中是没有的,如果想要使用需要找老版本SDK位于sdk/tools/目录下

当然,最新的SDK根目录实际上是有一个tools的压缩包的,备份好原来的,解压这个tools即可

b9d46301558c67ec2482ee5e08e74faf.png

这里我选择load view

e8e3bb2b256107f674893743a7b572db.png

简单又方便的操作

三.UI优化方式

适当的优化自己的代码写法这种我们就不说了,使用技巧优化目前有三种,也就是三个标签,我们分别来介绍

include

include 是为了提高布局的复用,如果某些地方出现重复的布局,可以将布局抽取出来,我们来演示一下通用的标题栏

<include

layout="@layout/layout_common_bar"

android:layout_width="match_parent"

android:layout_height="wrap_content"/>

merge

merge标签是作为include标签的一种辅助扩展来使用,它的主要作用是为了防止在引用布局文件时产生多余的布局嵌套。

Android渲染需要消耗时间,布局越复杂,性能就越差。如果用include那么势必又会多一层ViewGroup,所以include的根布局可以用merge来替换

xml version="1.0" encoding="utf-8"?>

<merge xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent">

merge>

ViewStub

这是一个轻量级别的View,而且是隐藏的,因为他的视图大小为0,通常需要他的时候才会去加载,所以常用语网络错误,列表为空等展示的需求,那么如何使用呢?

<ViewStub

android:id="@+id/mViewStub"

android:layout="@layout/layout_common_bar"

android:layout_width="wrap_content"

android:layout_height="wrap_content"/>

在布局中可以看到,我定义了一个layout去加载,但是实际上运行其实是不会去加载这个layout的,我们只有当合适的时机才会去使用它,比如:

public classMainActivity extendsAppCompatActivity {

privateViewStub mViewStub;

privateButton btn_load;

@Override

protected voidonCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

initView();

}

private voidinitView() {

mViewStub= (ViewStub) findViewById(R.id.mViewStub);

btn_load= (Button) findViewById(R.id.btn_load);

btn_load.setOnClickListener(newView.OnClickListener() {

@Override

public voidonClick(View v) {

//加载

mViewStub.inflate();

}

});

}

}

这就是布局的优化方式了,当然还有很多中,比如使用约束布局ConstaintLayout ,他允许你在不适用任何嵌套的情况下创建大型而又复杂的布局,ConstaintLayout 现在已经成为了Android Studio 创建项目默认的布局了,可想而知,如果不会的同学先去学习一下ConstaintLayout 吧,好的,本文到这里就结束了,谢谢大家!

有兴趣可以加入交流群:417046685 ,我们下期再见!