- 1、本文档共15页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Android群英传笔记——第十章:Android性能优化
随着Android应用增多,功能越来越复杂,布局也越来越丰富了,而这些也成为了阻碍一个应用流畅运行,因此,对复杂的功能进行性能优化是创造高质量应用的基础,本章节将为大家展示几种性能优化的方法,帮助开发者快速的构建运行速度快,相应速度快的应用程序
布局优化
内存优化
使用各种工具进行分析,优化
一.布局优化
系统在渲染图片的时候需要消耗大量的资源,一个好的UI,不仅要有良好的视觉体验,更应该具有良好的使用体验,因此布局优化就显得很重要了
1.Android UI渲染机制
人眼所看到的流畅画面,需要画面的帧数达到40帧每秒到60帧每秒,相信玩过PC游戏的都应该对帧有一个详细的概念,最佳的ftp在60左右,这也是评价一个显卡性能的一个高低标准之一,在Android中,系统通过VSYNC信号出发对UI的渲染、重绘,其间隔时间是16ms。这个16ms其实就是1000ms中显示60帧画面的单位时间。即1000、60,如果系统每次渲染都保持在16ms之内,那么我们看到的UI将十分的流畅,但这也是需要将所有的逻辑都保证在16ms里,如果16ms不能完成绘制,那么就会造成丢帧的现象,即当前该重绘的帧被未完成的逻辑阻塞
Android系统提供了检测UI渲染时间的工具,打开“开发者选项”,选择“Profile GPU Rendering”(我的手机是“GPU呈现模式分析”),选中“On screen as bars”(我的为“在屏幕上显示为条形图”)。每一条柱状线都包括三部分,蓝色代表测量绘制Display List的时间,红色代表OpenGL渲染Display List所需要的时间,黄色代表CPU等待GPU处理的时间,中间绿色横线代表VSYNC时间16ms,需要尽量将所有条形图都控制在这条绿线之下。
2.避免Overdraw
Overdraw,过渡绘制会浪费很多CPU、GPU资源,例如系统默认会绘制Activity的背景,而如果再给布局绘制了重叠的背景,那么默认Activity的背景就属于无效的过渡绘制。Android系统在开发者选项中提供了这样一个检测工具–“Enable GPU Overdraw”。借助它可以判断Overdraw的次数。尽量增大蓝色的区域,减少红色的区域,这里,我们用一张Google开发者博客上的图片来表示
通过这个工具可以查看当前区域中绘制的次数,从而尽量优化绘图层次,尽量增大蓝色的区域,减少红色的区域
3.优化布局层级
在Android中系统对View的测量、布局和绘制都是通过遍历View树来进行的,如果View树太高,就会影响其速度,因此优化布局的第一个方法就是减低view树的高度,Google也在其api文档中建议view树的结构不宜超过十层
不知道是否读者有注意到,在早期的Android版本中,Google使用线性布局作为默认布局,而在现在的Android使用的是相对布局(默认),原因就是通过扁平的相对布局来降低通过线性布局所产生的树的高度,从而提高布局的效率
4.避免嵌套过多无用的布局
嵌套的布局会让view树的高度越来越高,所以在布局中,需要根据自身布局的特点,来选择不同的layout组件,从而避免通过某一种layout组件来实现功能时的局限性,从而造成嵌套过多的形象‘
-1.使用 include标签重用布局
在一个应用程序里,为了风格和是哪个的统一,很多界面都会存在一些共同的UI,比如toolbar什么的,我们就可以使用 include标签重用布局
下面我们来演示一下如何使用 include标签,为了能够在不同的layout,所以再好不要写太多只有一个layout属性的组件,这里我们看一个非常简单的布局
?xml version=1.0 encoding=utf-8?
TextView xmlns:android=/apk/res/android
android:layout_width=0dp
android:layout_height=0dp
android:text=this is a common ui
android:textSize=20sp/TextView
代码中只有一個textview,並且显示一段文字,但是更多的时候,我们会通过相应的layout去简化,那么我们是如何去使用共同的ui尼,只需要使用该共通UI的布局文件中使用标签就可以了
RelativeLayout xmlns:android=/apk/res/android
xmlns:tools=/tools
android:layout_width=match_parent
文档评论(0)