在说性能优化之前,我们必须了解为什么要做性能优化,首先第一点肯定是为了用户体验,你想啊要是你的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篇相关推荐

  1. android使用桢布局,Android 常用布局

    Android的布局有: LinearLayout线性布局 RelativeLayout            相对布局 FrameLayout单桢布局 TableLayout表格布局 GridLay ...

  2. Android MediaScanner MediaProvider流程以及性能优化,音视频扫描

    Android MediaScanner MediaProvider流程以及性能优化,音视频扫描 快速扫描 一.源码解析 github链接 MediaScanner时序图 MediaSacannerR ...

  3. Android手机内存管理与性能优化

    Android手机内存管理与性能优化&JNI.NDK高级编程(JNI.Dalvik.内存监测) 课程分类:Android 适合人群:中级 课时数量:34小节课时 用到技术:Dalvik,DDM ...

  4. Unity3D性能优化——工具篇

    Quote from:https://zhuanlan.zhihu.com/p/39529241 性能优化是游戏项目开发中一个重要且必须的元素.用户和项目的需求在并且会持续增长.而即便在硬件设备高速发 ...

  5. 由美团技术文章整理---spark性能优化基础篇--开发调优与资源参数调优

    文章地址1:Spark性能优化指南--基础篇 - 美团技术团队 文章地址2:Spark性能优化指南--高级篇 - 美团技术团队 目录 一.关于性能优化基础篇--开发调优 1.避免创建重复RDD (1) ...

  6. iOS性能优化系列篇之“列表流畅度优化”工具篇

    这一篇文章是iOS性能优化系列文章的的第二篇,主要内容是关于列表流畅度的优化.在具体内容的阐述过程中会结合性能优化的总体原则进行分析,所以建议大家在阅读这篇文章前先阅读一下上一篇文章:iOS性能优化系 ...

  7. linux性能优化--cpu篇

    linux性能优化--cpu篇 前言 负载 CPU使用率 proc perf 一些链接 `perf list` 比较有用的event `perf stat` `perf record` Profili ...

  8. vuejs项目性能优化 - 总结篇

    首页等页面加载慢?打包编译后css/js文件过大?试试压缩.路由懒加载等技术 打包编译后,过大的文件如:app.css.app.js.vendor.js 本着 "开发环境".&qu ...

  9. android进阶---性能优化-----ui

    怎样才能写出优秀的Android App,是每一个程序员追求的目标.那么怎么才能写出一个优秀的App呢?相信很多初学者也会有这种迷茫.一句话来回答这个问题:细节很重要.今天我们就从最基础的XML布局来 ...

最新文章

  1. JAVA中几种常用JSON库性能比较
  2. 因时而动 顺势而为——广告人独家专访快友股份CEO林森
  3. vue27-2.0-自定义键盘事件
  4. Python爬虫:scrapy 的运行流程和各模块的作用
  5. php lararel,laravel整合tinymce和ckeditor编辑器,并用elfinder上传图片
  6. PHP json_encode 只支持utf8编码
  7. centos7 + VMware Workstation Pro
  8. linux上安装java环境
  9. 从早期的初创企业到MongoDB的经理(播客)
  10. 基于属性加密的ABE算法的应用场景思考展望
  11. python战斗2:看到一个页面编码
  12. 【抛砖引玉】“技术顾问” —— 老程序员的一个出路。
  13. 步进电机只能一个方向转?
  14. Nginx监控数据采集与分析
  15. 二维数组的应用:三子棋
  16. 信创办公--基于WPS的Word最佳实践系列(邮件合并实现邮件批量发送)
  17. oracle recover database,【Oracle】探究recover database until scn
  18. Linux下忘记root密码重置过程笔记
  19. layer 关闭一个弹窗打不开新的的弹窗_电脑小技巧关闭FF弹窗
  20. PAT甲级 1151 LCA in a Binary Tree (30分) LCA算法/C++

热门文章

  1. 学习dubbo(二): 第1个例子
  2. 微信小程序实践_1前言
  3. 专访英特尔(中国)开源技术中心:HTML5要如何达到原生性能
  4. WF4 持久化 第四篇
  5. HTTP 加速器 Varnish
  6. 程序出错后,程序员给测试人员的20条高频回复
  7. truncate报ORA-02266错“唯一/主键被启用的外部关键字引用”解决方法
  8. scapy on openwrt
  9. [C++]C++11:Function与Bind
  10. Linux 修改mac 地址方法记录