必看4

熟练布局优化、布局嵌套优化、ViewStub、懒加载、过度绘制优化;

1、布局优化常用手段有哪些?

答案

  1. 减少布局嵌套层级,避免多层 LinearLayout 嵌套;
  2. 优先使用 ConstraintLayout 约束布局,扁平化结构;
  3. ViewStub 懒加载不立即显示的布局;
  4. include 复用公共布局;
  5. 删除多余无用 View、减少没必要的容器布局;
  6. 合理使用 merge 标签减少层级。

2、什么是 ViewStub?作用和原理?

答案

ViewStub 是轻量级、无尺寸、默认不加载的布局占位控件。

作用:懒加载布局 ,一开始不 inflate、不占用内存,等到需要时再inflate 加载布局。

适用:弹窗、详情、网络错误页、默认空页面 等不常显示的布局。

3、ViewStub 优点

答案

不占用绘制资源、不加载视图、减少启动耗时、减少内存占用、优化页面渲染速度。

4、include、merge、ViewStub 三者区别

答案

  • include:复用布局,直接引入布局文件,会增加层级;
  • merge :配合 include 使用,减少一层嵌套,合并根布局;
  • ViewStub懒加载占位,默认不渲染,用时再加载。

5、什么是过度绘制(OverDraw)?

答案

同一个像素点 被多次重复绘制

比如:底层背景 + 父布局背景 + 子布局背景 + 文字背景,同一位置叠了多层颜色,造成 GPU 冗余绘制,导致页面卡顿、耗电。

6、过度绘制怎么检测?

答案 开发者选项 → 开启 调试 GPU 过度绘制;屏幕颜色代表绘制层数:

  • 无色:1 层 正常
  • 蓝色:2 层 可接受
  • 绿色:3 层 偏高
  • 红色:4 层以上 严重过度绘制,必须优化

7、过度绘制怎么优化?

答案

  1. 去掉多余背景色,能不设就不设;
  2. 层级精简,减少嵌套布局;
  3. 避免父布局和子布局重复设置背景;
  4. 自定义 View 优化 onDraw,减少无效重绘
  5. 用裁剪区域,只绘制需要刷新的区域;
  6. 主题背景和布局背景合并,避免重复铺底色。

8、什么是布局懒加载?有哪些实现方式?

答案

懒加载:只在需要显示时再加载布局、请求数据,不提前加载浪费性能。

实现方式:

  1. ViewStub 布局懒加载
  2. Fragment 可见性懒加载(ViewPager 预加载优化)
  3. 网络数据懒加载,页面可见再请求接口

9、为什么要减少布局嵌套?

答案

布局层级越深,测量、布局、绘制耗时越长;

inflate 解析慢、UI 渲染慢、容易卡顿、拖慢冷启动和页面跳转速度。

10、ConstraintLayout 为什么能优化布局?

答案

可以实现扁平化布局,一层根布局搞定复杂 UI,不用多层嵌套;减少测量和布局遍历次数,提升绘制性能。

极简背诵浓缩版

布局优化核心:减少嵌套、多用 ConstraintLayout、include 复用、merge 减层级、ViewStub 懒加载。ViewStub 是轻量级占位,默认不加载,用时再 inflate,省内存省渲染。过度绘制是同一像素多层重复绘制,通过开发者工具检测,删掉多余背景、精简层级、减少重复铺色来优化。懒加载通过 ViewStub、Fragment 可见性控制,延迟加载布局和网络数据,提升首屏速度和性能。

相关推荐
刮风那天1 小时前
Android Framework 核心架构图
android
__Witheart__1 小时前
3588 安卓编译空间不足报错
android
aaajj1 小时前
【Android】手机屏幕劫持防护
android·智能手机
写做四月一日的四月一日2 小时前
在安卓手机上安装小龙虾openclaw并配置QQ机器人接入
android·人工智能
流星白龙2 小时前
【MySQL高阶】6.MySQL数据目录,日志
android·mysql·adb
福大大架构师每日一题2 小时前
rust 1.96.0 更新:语言、编译器、Cargo、Rustdoc、兼容性全面升级,必看完整解读
android·开发语言·rust
城管不管2 小时前
Agent——001
android·java·数据库·llm·prompt
刮风那天2 小时前
Android 理解onTransitionReady(一)
android
流星白龙2 小时前
【MySQL高阶】2.MySQL命令行客户端(2)
android·mysql·adb
努力努力再努力wz2 小时前
【Qt入门系列】:QLabel控件详解:从文本显示到图片展示,再到内容布局与伙伴机制
android·开发语言·数据结构·数据库·c++·qt·mysql