Android 性能优化

一、绘制优化

Android应用启动慢,经常卡顿,按照场景分可分为两大类:

页面绘制:

主要原因是绘制的层级深,页面复杂,刷新不合理。大多数场景是页面初始化或者页面跳转。

数据处理:

主要原因是数据处理量太大,一般分为三种情况:

数据处理在UI线程;数据处理占用CPU高;内存增加导致GC频繁。

Android的显示过程可以简单概括为:应用层把经过测量、布局、绘制后的surface缓存数据,通过SurfaceFlinger把数据显示到屏幕上。应用层负责绘制,系统层负责渲染,通过进程间通信把应用层需要绘制的数据传递到系统层。

应用层:

Measure:使用深度优先原则递归得到所有视图的宽高;
Layout:使用深度优先原则递归得到所有视图的位置;

Draw:支持两种绘制:软件绘制(CPU)和硬件加速(GPU)

系统层:

Android显示系统使用了匿名共享内存:

SharedClient,每个应用和SurfaceFlinger之间都会创建一个SharedClient,最多可以创建31个SharedBufferStack集合,每个Surface都对应一个SharedBufferStack,也就是一个Window。

应用层绘制到缓存区,SurfaceFlinger把缓存区数据渲染到屏幕,由于两个进程都使用了Android的匿名共享内存SharedClient。

绘制过程是CPU准备数据,通过Driver层把数据交给CPU渲染,其中CPU主要负责Measure,Layout,Record,Execute的数据计算工作,GPU负责Rasterization渲染。

卡顿的根本原因:

绘制任务太重,绘制一帧内容耗时太长。主线程太忙了,导致VSync信号来时还没有准备好数据,导致丢帧。

主线称要做的工作:

UI生命周期控制,

系统事件处理
消息处理

页面布局

页面绘制

页面刷新

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值