必看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 可见性控制,延迟加载布局和网络数据,提升首屏速度和性能。

相关推荐
恋猫de小郭3 小时前
Android 限制侧载新进展,谷歌联合国内厂商推验证计划
android·前端·flutter
恋猫de小郭3 小时前
解读 Android 17 全新内存限制,有没有“豁免”后门?
android·前端·flutter
贾艺驰6 小时前
实战Android Framework: 新增一个系统权限
android
alexhilton11 小时前
使用Android Archive进行打包
android·kotlin·android jetpack
badhope12 小时前
做了几年安卓开发,这些坑我帮你踩过了
android·android studio
逐光老顽童3 天前
Java 与 Kotlin 混合开发避坑指南:30 个真实案例实录
android·kotlin
爱勇宝3 天前
鸿蒙生态的下半场:开发者不只要能开发,还要能赚钱
android·前端·程序员
Yeyu3 天前
刷新一帧的艺术:invalidate / postInvalidate / postInvalidateOnAnimation全解析
android
潘潘潘3 天前
Android OTA 升级原理和流程介绍
android
plainGeekDev3 天前
null 判断 → Kotlin 可空类型
android·java·kotlin