android使用桢布局,Android性能优化UI篇
在说性能优化之前,我们必须了解为什么要做性能优化,首先第一点肯定是为了用户体验,你想啊要是你的App用起来很卡,页面加载慢腾腾的,用户能一直忍受你吗?其二性能优化也是对我们程序员自己的考验,优化过程需要我们掌握很多的东西,比如说Java的内存模型,垃圾回收机制,Dalvik和Art虚拟机,Android底层等等等等知识,还有很多工具的使用,这章主要记录一些UI优化方面的东西。
UI优化主要的目的是为了让页面更加流畅,大家都知道Android系统每隔16ms发出垂直同步(VSYNC)信号,触发对UI的渲染,如果每次都在16ms内渲染成功,达到流畅的画面所需要的60fps(表示60桢每秒),那用户就不会感觉到页面的卡顿,
如果页面在16ms内还没有绘制完,就会出现丢帧现象,还是显示的上一桢页面,给人感觉卡住了一样,
所以我们优化要做的事情就是尽量让页面在16ms内绘制完,解决这种过度绘制的问题,下面我们就具体说说怎么解决这个问题。
我们的App都是有很多页面,首先得找到要优化的页面,这里我推荐使用两个工具,一个是手机自带的显示过度绘制区域的功能,我用的魅族手机是在开发者选项里面的,另一个是Android Studio自带的工具Lint,我个人更喜欢用手机自带的这个工具,比较直观的显示页面的绘制情况,在开启这个功能后页面显示如下图,
App的每个页面的控件都会加上额外的图层,总共4种颜色,代表4种绘制的级别,如下图,
其中红色代表的是最严重的过度绘制,从上面依次减弱,我们要做的就是修改这些区域,让它达到蓝色这种级别。通过使用这个工具,我们能很快的找到需要修改的页面。
在找到这个页面后,接下来我们就得分析是什么原因导致这个页面过度绘制,在这里我们还得使用一个工具Hierarchy View,它可以把整个页面中每个控件的所占区域用矩形标示出来,并计算出每个控件在测量布局和绘制所花费的时间,而且过度绘制的控件会用红色的圆圈标出来,至于怎么使用这个工具可以看这篇文章,通过这个工具我们可以把问题具体到某个控件上面,接下来就是解决这个控件的过度绘制问题了,在这里提供几个解决的思路:
1,减少页面的布局层次结构。
2,减少不必要的背景图片或背景颜色。
3,减少View的更新次数,比如调用View的requestLayout或者invalidate,setVisiable等等方法,都会导致View重新绘制。
4,尝试使用Android系统提供等标签,不要把一大堆控件放在同一个xml布局文件里面。
5,尝试使用RecyclerView代替ListView吧,RecyclerView还能与实现嵌套滑动接口的控件做各种交互。
总结,把自己遇到的问题写出来,给自己提个醒,也希望能给一些人提供一个思路。
参考:
http://www.jianshu.com/p/e9e05ce5b0c9,
http://www.csdn.net/article/2015-01-20/2823621-android-performance-patterns
android使用桢布局,Android性能优化UI篇相关推荐
- android使用桢布局,Android 常用布局
Android的布局有: LinearLayout线性布局 RelativeLayout 相对布局 FrameLayout单桢布局 TableLayout表格布局 GridLay ...
- Android MediaScanner MediaProvider流程以及性能优化,音视频扫描
Android MediaScanner MediaProvider流程以及性能优化,音视频扫描 快速扫描 一.源码解析 github链接 MediaScanner时序图 MediaSacannerR ...
- Android手机内存管理与性能优化
Android手机内存管理与性能优化&JNI.NDK高级编程(JNI.Dalvik.内存监测) 课程分类:Android 适合人群:中级 课时数量:34小节课时 用到技术:Dalvik,DDM ...
- Unity3D性能优化——工具篇
Quote from:https://zhuanlan.zhihu.com/p/39529241 性能优化是游戏项目开发中一个重要且必须的元素.用户和项目的需求在并且会持续增长.而即便在硬件设备高速发 ...
- 由美团技术文章整理---spark性能优化基础篇--开发调优与资源参数调优
文章地址1:Spark性能优化指南--基础篇 - 美团技术团队 文章地址2:Spark性能优化指南--高级篇 - 美团技术团队 目录 一.关于性能优化基础篇--开发调优 1.避免创建重复RDD (1) ...
- iOS性能优化系列篇之“列表流畅度优化”工具篇
这一篇文章是iOS性能优化系列文章的的第二篇,主要内容是关于列表流畅度的优化.在具体内容的阐述过程中会结合性能优化的总体原则进行分析,所以建议大家在阅读这篇文章前先阅读一下上一篇文章:iOS性能优化系 ...
- linux性能优化--cpu篇
linux性能优化--cpu篇 前言 负载 CPU使用率 proc perf 一些链接 `perf list` 比较有用的event `perf stat` `perf record` Profili ...
- vuejs项目性能优化 - 总结篇
首页等页面加载慢?打包编译后css/js文件过大?试试压缩.路由懒加载等技术 打包编译后,过大的文件如:app.css.app.js.vendor.js 本着 "开发环境".&qu ...
- android进阶---性能优化-----ui
怎样才能写出优秀的Android App,是每一个程序员追求的目标.那么怎么才能写出一个优秀的App呢?相信很多初学者也会有这种迷茫.一句话来回答这个问题:细节很重要.今天我们就从最基础的XML布局来 ...
最新文章
- JAVA中几种常用JSON库性能比较
- 因时而动 顺势而为——广告人独家专访快友股份CEO林森
- vue27-2.0-自定义键盘事件
- Python爬虫:scrapy 的运行流程和各模块的作用
- php lararel,laravel整合tinymce和ckeditor编辑器,并用elfinder上传图片
- PHP json_encode 只支持utf8编码
- centos7 + VMware Workstation Pro
- linux上安装java环境
- 从早期的初创企业到MongoDB的经理(播客)
- 基于属性加密的ABE算法的应用场景思考展望
- python战斗2:看到一个页面编码
- 【抛砖引玉】“技术顾问” —— 老程序员的一个出路。
- 步进电机只能一个方向转?
- Nginx监控数据采集与分析
- 二维数组的应用:三子棋
- 信创办公--基于WPS的Word最佳实践系列(邮件合并实现邮件批量发送)
- oracle recover database,【Oracle】探究recover database until scn
- Linux下忘记root密码重置过程笔记
- layer 关闭一个弹窗打不开新的的弹窗_电脑小技巧关闭FF弹窗
- PAT甲级 1151 LCA in a Binary Tree (30分) LCA算法/C++