Android性能优化之绘制优化,androidstudio开发实战pdf

本文探讨了Android性能优化,特别是绘制优化和刷新机制。内容涵盖Android的显示原理,包括应用层的绘制原理、硬件加速的优缺点、系统层的SurfaceFlinger服务及其工作流程。此外,文章讨论了Android的刷新机制,如VSYNC、Triple Buffer和Choreographer,以及为何引入Project Butter。还分析了卡顿的根本原因,并介绍了Hierarchy View、Profile GPU Rendering、TraceView和Systrace等性能分析工具的使用。最后,提出了布局优化的策略,如减少层级、提高显示速度和布局复用。
摘要由CSDN通过智能技术生成

滑动

而造成其产生的根本原因可以分为两大类:

1、界面绘制

绘制层级深

页面复杂

刷新不合理

2、数据处理

数据处理在UI线程

占用CPU高,导致主线程拿不到时间片

内存增加导致GC频繁,从而引起卡顿

#一、Android系统显示原理

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

1、绘制原理

应用层

在Android的每个View都会经过Measure和Layout来确定当前需要绘制的View所在的大小和位置,然后,再通过Draw绘制到surface上。在Android系统中整体的绘制源码是在ViewRootImpl类的performTraversals()方法,通过这个方法可以看出Measure和Layout都是递归来获取View的大小和位置,并且以深度作为优先级。显然,层级越深,元素越多,耗时就越长。

对于绘制,Android支持两种绘制方式:

软件绘制(CPU)

硬件绘制(GPU)

硬件加速从Android 3.0开始支持,它在UI显示和绘制效率方面远高于软件绘制。但它的局限如下:

耗电:GPU功耗高于CPU。

兼容性:不兼容某些接口和函数。

内存大:使用OpenGL的接口需要占用内存8MB。

系统层

将数据渲染到屏幕上是通过系统级进程中的SurfaceFlinger服务来实现的,它的主要工作流程如下:

1、响应客户端事件,创建Layer与客户端的Surface建立连接。

2、接收客户端数据和属性,修改Layer属性,如尺寸、颜色、透明度等。

3、将创建的Layer内容刷新到屏幕上。

4、维持Layer的序列,并对Layer的最终输出做裁剪计算。

其中,SurfaceFlinger系统进程和应用进程使用了匿名共享内存SharedClient,并且,每一
个应用和SurfaceFlinger之间都会创建一个SharedClient,在每个SharedClient中,最多可以创建31个SharedBufferStack,每一个SharedBufferStack对应一个Surface,即一个window。(其中包含了两个(小于4.1版本)或者三个(4.1及以上版本)缓冲区)

因此,从上可知,一个Android应用程序最多可以包含31个窗口。最后,显示的整体流程如下:

1、应用层绘制到缓冲区。

2、SurfaceFlinger把缓冲区数据渲染到屏幕,其中使用了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值