Android UI

参考Awesome-Android-Interview

Demo:Advanced

 

Android性能优化之渲染篇

 

px

px = density * dp

像素点,如手机分辨率320x480表示宽有320像素。高有480像素

ppi

ppi等于或约等于dpi

像素密度,每英寸所包含的像素数目,这个是屏幕物理参数。

dpi

像素密度,在系统软件上指定的单位尺寸的像素数目。跟ppi不同的是,dpi可能会被人为调整。

dp

px = dp * (dpi / 160)

基于屏幕物理分辨率一个抽象的单位,用于说明与密度无关的尺寸和位置。

density

density = dpi / 160

密度,屏幕上每平方英寸中含有的像素点数量。

 

屏幕适配

Android 目前稳定高效的 UI 适配方案

smallestWidth 限定符适配方案

一种极低成本的 Android 屏幕适配方式

今日头条适配方案

 

 

尽量使用硬件加速

硬件加速绘制的性能是远远高于软件绘制。

 

X2C

异步创建

View 重用

ListView、RecycleView 通过 View 的缓存与重用大大地提升渲染性能。

 

减少 UI 布局层次。例如尽量扁平化,使用<ViewStub><Merge>等优化。

优化 layout 的开销。尽量不使用 RelativeLayout 或者基于 weighted LinearLayout,使用 ConstraintLayout 替代 RelativeLayout 或者 weighted LinearLayout。

背景优化。尽量不要重复去设置背景,这里需要注意的是主题背景(theme), theme 默认会是一个纯色背景,如果我们自定义了界面的背景,那么主题的背景我们来说是无用的。但是由于主题背景是设置在 DecorView 中,所以这里会带来重复绘制,也会带来绘制性能损耗。

 

onDraw中避免创建大对象,进行耗时操作。

TextView的优化,比如利用它的drawableLeft属性。此外,也可以使用Android 9.0之后的 PrecomputedText,它将文件的measure与layout过程进行了异步化。

 

其他

Litho:异步布局

声明式:它使用了声明式的API来定义UI组件。

异步布局:它可以提前布局UI,而不会阻塞UI线程。

视图扁平化:它使用了Facebook开源的另一款布局引擎Yoga进行布局,以自动减少UI包含的ViewGroup数量。

细粒度的回收:可以回收文本或图形等任何组件,并可以在用户界面的任何位置重复使用。

内部不仅支持使用View来渲染视图,还可以使用更轻量的Drawable来渲染视图。Litho实现了大量使用Drawable来渲染的基础组件,可以进一步使布局扁平化。

 

Flutter:自己的布局 + 渲染引擎

RenderThread:异步渲染动画

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值