Android布局优化
布局优化主要有以下方向:
- 减少布局层级
- 减少inflate布局的时间,原生加载XML的方式需要IO + 反射操作
- 减少过度绘制
可以使用工具:
- Layout Inspector:查看当前布局层级
- systrace:查看每一帧的时间和方法调用
- Choreographer:接收vsync垂直同步信号,可以用来计算帧率
- LayoutInflater.Factory/LayoutInflater.Factory2: 获取每个View创建的耗时
布局层级优化方式
- 使用ConstraintLayout
- 减少布局嵌套,层级不要太深,使用merge标签等
减少主线程布局创建时间的方式:
- 使用AsynclayoutInflater异步创建布局,这种方式是把耗时操作放到了子线程,但是会缺少TextView -> AppCompatTextView等兼容效果
- 使用纯代码的方式编写布局,new View(context),复杂、繁琐,不好维护
- 使用第三方库如X2C等,使用xml编写布局,在编译时转成Java代码,这种方式同样缺少TextView -> AppCompatTextView等兼容效果,且有些xml属性不支持
- 使用Jetpack Compose,声明式UI,应该是未来的趋势了
减少过度绘制
- 减少不必要的背景设置,减少复杂shape等
- 自定义View的时候,使用Canvas的clipRect方法避免绘制被遮盖的内容
Android布局优化相关推荐
- Android布局加载慢,Android布局优化(四)X2C — 提升布局加载速度200%
系列文章 前言 在Android布局优化(一)从布局加载原理说起中我们说到了布局加载的两大性能瓶颈,通过IO操作将XML加载到内存中并进行解析和通过反射创建View.这里介绍一种避免运行时通过IO操作 ...
- 深入探索Android布局优化(上)
前言 成为一名优秀的Android开发,需要一份完备的知识体系,在这里,让我们一起成长为自己所想的那样~. Android的绘制优化其实可以分为两个部分,即布局(UI)优化和卡顿优化,而布局优化的核心 ...
- android listview viewstub,Android布局优化之ViewStub控件
ViewStub是Android布局优化中一个很不错的标签/控件,直接继承自View.虽然Android开发人员基本上都听说过,但是真正用的可能不多. ViewStub可以理解成一个非常轻量级的Vie ...
- 一篇文章搞定《Android布局优化》
------<一篇文章搞定Android布局优化> 前言 为什么要进行布局优化? Android绘制原理 双缓冲机制 布局加载原理 布局加载优化的一些方法介绍 AsyncLayoutInf ...
- android布局优化方案,Android启动优化-布局优化
Android启动优化-布局优化 安卓应用开发发展到今天,已经成为一个非常成熟的技术方向,从目前的情况看,安卓开发还是一个热火朝天的发展,但高级人才却相对较少,如今移动互联网的开发者也逐渐开始注重插入 ...
- android layout include merge,Android 布局优化之include与merge
Android 官方提供了三个用来优化布局的标签,分别是include.merge与ViewStub,其中ViewStub是动态加载视图到内存,大家可以查阅:Android UI布局优化之ViewSt ...
- android 减少布局层级,Android 布局优化
布局优化主要从以下几点进行着手 减少布局层次 和 复杂度 优化绘制流程 按需加载布局 减少布局层次 和 复杂度 首先我们可以通过以下工具分析界面布局的结构 查看布局树工具:Hierarchy View ...
- Android 布局优化
在开发过程中我们经常说性能优化,但性能优化是一个比较宽泛的概念.在Android开发中性能优化可能包括:Java代码优化, 算法优化, SQLite优化, 布局优化等.那么这篇博客就来总结并分享下An ...
- android布局优化 工具,详解Android布局优化
怎样才能写出优秀的Android App,是每一个程序员追求的目标.那么怎么才能写出一个优秀的App呢?相信很多初学者也会有这种迷茫.一句话来回答这个问题:细节很重要.今天我们就从最基础的XML布局来 ...
- Android成长日记-Android布局优化
Android常用布局 1. LinearLayout(线性布局) 2. RelativeLayout(相对布局) 3. TableLayout(表格布局) 4. AbsoluteLayou(绝对布局 ...
最新文章
- Error: “incorrect inclusion of a cudart header file”
- Codeforces Round #324 (Div. 2) E. Anton and Ira 贪心
- GDCM:gdcm::PDFCodec的测试程序
- 计算机导论上机模拟,计算机导论模拟考试题6份完整版.doc
- linux常用命令和配置
- cs中ComboBox以设置DataSource方式填充后,清除选项出错
- js tooltip之wz_tooltip使用方法和参数备忘
- gitlab一键安装 笔记
- 自动化监控:主动发现自动注册
- 软考-网络工程师复习资料
- [4G5G专题-67]:RF层 - 天线常见指标与选型
- 微信抢红包插件xposed框架
- Java版本中最好用的网易云音乐、qq音乐api请求工具,你还在忙于如何使用java调音乐api?来看下这里的实现
- 2021年终总结与展望
- HTML5作业:实现小米官网静态首页
- 知我者谓我心忧,不知者谓我何求!
- 【视频教程】帝国CMS制作网站系列教程08—单页模板的制作
- Matlab使用图形平滑处理
- STL剖析(二):容器底层数据结构及常见用法
- 【LeetCode】两道贪心算法题目-455分发饼干,860柠檬水找零
热门文章
- Hacked【黑客】手游攻略
- 《指弹:千与千寻:Always with me》
- 求一个整数的各个位数
- 如何从YouTube历史记录中暂停,清除和删除视频
- 评论回复功能 asp.net_LR2021颜色分级功能让照片调色简单有趣好玩!最新尝鲜测试...
- 【整理收集】使用当中IE浏览器遇到的兼容性问题
- 最新WordPress微信小程序社区论坛源码多端应用
- 1月第1周业务风控关注 | 四部门联合印发App违法违规收集使用个人信息行为认定方法
- 根号分治 + 入门题目
- wi-fi 频宽设置_为客人设置Wi-Fi的10种方法