Android性能优化——界面流畅度优化

序言

首先流畅度不仅仅是受到代码的影响。也会跟机器的硬件配置有关系。所以第一点需要明确的是,流畅度最低保证在哪个硬件配置之上。这样有了一个基点之后,才能比较好明确优化目标。不然你拿一个两三年前的机子来做优化。那就真的是吃力不讨好的事情。

流畅度跟两方面有关:一、机器的配置,二、编写的代码。

首先明确一点:流畅意味着 每一帧的绘制在16ms内完成。

那如果在你选的最低配置的机子上达到了流畅,那就没必要优化了。如果在你选的机子上,出现了较大的流畅性问题,那就需要着重优化。

使用的工具

我们需要使用Systrace工具来进行优化。具体的使用方法,这里就不详细介绍了。我在这里附上Android官方文档,你也可以寻找相关博客学习。Android Systrace使用文档

这里开始,就是假设你已经看过相关博客和官方文档了,懂得如何使用systrace来测量界面流畅性。

需要的东西:1. 作为基准的手机。 2. chrome 3.Android Monitor工具集。

步骤

  1. 获取测试报告(也就是.trace文件) 
    当开始systrace测试时,在相应的页面上滚动。然后systrace就会在设定的时长(默认5秒)结束。并在(默认在user目录)相应的目录下生成trace.html报告
  2. 使用chrome打开 
    在chrom中键入 chrome://tracing ,回车。得到如下页面。 打开刚刚生成的文件 

    点击Load,回弹出一个文件选择器,选中刚刚生成的 trace.html 文件。就打开该报告
  3. 分析 
    滚动到帧相应的行。Frames,并展开UIThread 

往右边看,我们可以看到F标记。一个F表示一帧。绿色的F,表示该帧在16ms内绘制完成。而红色则表示,严重超出了16ms。也就是通常所说的掉帧。 

从上面这幅图可以看到。红框框出来的地方就是卡顿的地方。我们通过快捷键w(放大)s(缩小) a(向左移动)d(向右移动)来操控 
就让我们放大红色区域看看 

 
可以看到蓝绿部分都是GridView inflate操作,看起来GridView回收机制没有生效。然后回到代码中分析后,发现原来是因为这个页面的结构是ListView嵌套了GridView。这就是不断inflate的原因所在。

解决

发现问题之后,解决起来也就有方向了。这个就得看具体原因了。

总结

界面流畅度一般来说就以下两种造成

  1. getView执行时间过长。(绝大多说滚动的页面都是ListView或者RecycleView做的,所以出问题就在getView那里了)
  2. 频繁的创建大的临时对象或者过多的临时对象,触发频繁的垃圾回收。垃圾回收时,其他线程是会停止工作的,包括主线。等垃圾回收完毕,主线才会继续工作。这就导致了卡顿。

Android性能优化——界面流畅度优化相关推荐

  1. Android应用优化之流畅度优化实操

    上一篇流畅度概念向大家详细地描述了VSync机制和Choreographer编舞者的用法.可能所讲解的内容偏向理论概念,因此这篇是流畅度优化实操,整篇主要分三层,UI层.代码逻辑层.IO层来讲述各个优 ...

  2. 【Android性能】【流畅度】概念初识

    小菜鸡最近想在性能测试方面多了解一些,因此先了解了一下安卓性能中的流畅度相关概念,本文章纯理论概念,暂不涉及对应的代码机制,后面再慢慢补- 主要参考了以下两篇大佬文章,内容可能存在高度重复,仅作为学习 ...

  3. Android App界面和流畅度优化

    Android App界面和流畅度优化 所谓界面和流畅度优化,就是尽可能多地消除用户可直接感知的.影响用户操作体验的bug 1.人为在UI线程中做轻微耗时操作,导致UI线程卡顿 人为避免一切耗时操作 ...

  4. Android应用优化之流畅度实操

    @android:color/black @color/app_frame_bg_color 但是在布局页面,设计人员设计的底色,根本不是默认的背景色,如果我们在这个页面的根布局再设一个背景的话就是多 ...

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

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

  6. Flutter 流畅度优化实践总结

    本篇内容来自ArchSummit会议分享 作者介绍: 张云龙(云从),闲鱼客户端专家.先后在网易.字节.阿里任职移动端研发.目前在阿里巴巴闲鱼技术部,目前负责闲鱼 app 包大小.流畅度.启动等端体验 ...

  7. 淘特 Flutter 流畅度优化实践

    作者:谢伟(韦圣) 不同的业务背景引出不同的技术诉求,"用户体验特爽"是淘特的不懈追求,本文将介绍笔者加入淘特以来在Flutter流畅度方面的诸多优化实践,这些优化不涉及Engin ...

  8. 已开源!Flutter 基于分帧渲染的流畅度优化组件 Keframe

    大家好,这里是承香墨影! 今天给大家推荐一个,Flutter 中利用分帧渲染优化流程度的开源库,刚开源,还热乎着.这次开源可真波折,看着 @Nayuta 前前后后在公司内部流程走了一个多月吧,太艰难了 ...

  9. 淘特 Flutter 流畅度优化实践 · 二期

    作者:谢伟(韦圣) "在上一篇<淘特 Flutter 流畅度优化实践>中说到,虽然一期效果较为明显,但距离极致的用户体验仍有不小的差距.去年,淘特端架构联合业务团队共同发起&qu ...

最新文章

  1. uc的剪切板能关掉吗_关掉网络游戏,小孩就有美好的未来吗?
  2. nginx多进程,日志不乱序
  3. Hotel POJ - 3667(线段树 + 区间合并
  4. python内点法_python射线法判断一个点在图形区域内外
  5. VMware NSX part 1(介绍) part 2(NSX-Manager安装) part 3(NSX Controller部署)
  6. Python数据处理(一):处理 JSON、XML、CSV 三种格式数据
  7. Unity MRTK 制作按钮调整大小
  8. Atiit 常见功能 常用功能与模块的最快速解决方案
  9. 54张扑克牌,除去两张大小王剩下52张扑克牌。问红桃A和黑桃A同时被一个人拿到的概率是多少?
  10. 安全模式下密码忘记的解决方法
  11. Ant Design Table columns 参数配置隐藏列方法
  12. 西工大机考《房地产法》大作业网考
  13. matlab 矩阵绘三维图
  14. #广搜,分块#jzoj 3974 CH #46A 磁力块
  15. 给自己的网站加上SSL安全认证
  16. 多附件添加功能的实现
  17. arduino nano 简单实现蓝牙模块与手机进行通信
  18. 如何守住你的年终奖? 1
  19. 去O渐成过去式,Cloud进入现在时-2015 Oracle技术嘉年华精彩回放
  20. 「深度学习之优化算法」(六)人工蜂群算法

热门文章

  1. redis和mysql双写一致_缓存与库双写一致,这种“老大难”怎么给它制服?
  2. Linux内核分析 - 网络[九]:邻居表
  3. ios 控件切圆_iOS中 切圆角,任意几个角(带边框,不带边框)__OC和Swift版本 韩俊强的博客...
  4. 菜鸟学习笔记:Java基础篇7(包装类、时间相关类、文件类、异常处理类)
  5. bootstrap 垂直居中 布局_网页布局都有哪种?一般都用什么布局?
  6. 【LeetCode】剑指 Offer 31. 栈的压入、弹出序列
  7. php开启安全模式后影响的函数
  8. RuiJi Scraper基础 – RuiJi表达式模型
  9. Java 常用类库 之 比较接口 Comparator
  10. 第二冲刺阶段绩效评估