今天在泡泡的开发过程中遇到了掉帧的现象,为此我去调研了一下相关的文章。同时也发现了一两个有意思的博客。

掉帧的基本概念

一个专职测试工程师的博客:https://androidtest.org/android-graphics-performance-pattens/

一个Android开发人员的技术博客:Android渲染机制和丢帧分析

这两篇文章普及了一些简单的概念和解决办法,讲的也比较清楚了。

使用Systrace调查

我尝试使用了一下systrace这款工具,(这里是关于systrace分析UI性能的文章,注意现在新版本的Chrome是没有办法直接浏览trace文件的,必须打开url chrome://tracing后再选择load)这款工具效果不错,在下图中的统计结果里可以看到在Frames这一行中,有几个红色背景的F(Frame):

点击这几个Frame可以看到一些额外信息:

Slice窗口里提示我们这一帧getView()过程耗费了太多时间。
但是通过这种工具我们并没有获得足够多的信息,我们现在只能确认,掉帧主要是在getView()中。但是,到底是什么任务拖慢了?

使用traceView进行下一步调查

systrace可以解决这一问题,但是必须修改app源码加上注解才可以调查,这肯定没有办法满足我们的需求,这里就需要另一款Android开发工具trace(使用入门)。得到了一些结果:
这是getView()中主要逻辑的占用时间:

processDifferentFeeds占用了61%的时间,看来是大头

这个updateFeedCharacterStyleUI方法调用的占用时常很不正常,选择继续查看:

继续深入之后发现这两个方法中都有一个名为measureTextLine方法,而且占比较大。这是一个用来测量TextView行数的方法,经讨论之后去掉。

之后再次进行性能测试后可以看到processDifferentFeeds()所耗用的时间占比明显减少,占比为30%:

更多相关文章

  1. Android(安卓)动画之Lottie动画使用
  2. Android(安卓)动画之Lottie动画使用
  3. Android(安卓)小项目之--SQLite 使用法门 (附源码)
  4. Android轮播图控件CustomBanner的使用讲解
  5. Android界面编程——Android高级UI组件(三)
  6. 绿色守护简单使用教程
  7. 箭头函数的基础使用
  8. NPM 和webpack 的基础使用
  9. Python list sort方法的具体使用

随机推荐

  1. Android之相机
  2. android 各类开源项目整理 包括 个性化控
  3. Android 自定义像素AVD模拟器无键盘
  4. android 点击分享内容中的连接地址在应用
  5. Android WebView 实例
  6. Android根据文件路径加载指定文件
  7. android studio打包apk
  8. 命令获取 Eclipse Android 证书指纹 MD5
  9. Android 技术提升总结(持续更新)
  10. 转:Android中几种图像特效处理方法小结