首页 > 其他 > 详细

利用Traceview 解决页面卡顿问题

时间:2016-01-27 19:25:20      阅读:333      评论:0      收藏:0      [点我收藏+]

    背景:我在做一个可以滚动的页面的时候插入一个可以播放gif动画的控件,结果发现,如果这个动画在播放的时候,滑动页面会发现卡顿。开始以为是硬件加速问题......最后通过traceview工具发现真正的原因。

    android手机开发模式中有一个监控选项下有个属性是gpu显示配置文件,在里面选中以条的形式显示于屏幕。开启之后会发现页面会出现很多的竖线。这个就表示了渲染每帧需要多少时间。按照规则,我们必须要使之小于16ms,

 不然就会出现卡顿(失帧)。最下面有一条绿色横线,这个就是16ms分割线,超过这部分的都是大于16ms的。

    1蓝色,2橘色,3黄色

    1.   Draw是消耗在构建java显示列表的时间。 它显示出运行方法用的时间诸如View.onDraw(Canvas).
    2.   Process是消耗在Android的2D渲染器执行显示列表的时间。你的视图层次越多,要执行的绘图命令就越多。
    3.   Execute是消耗在排列每个发送过来的帧的顺序的时间.这部分的图通常是很小的。

注意:使顺利在60帧,每帧必须小于16毫秒完成。

关于Execute:如果执行耗费了过长的时间,这意味着你是跑在前面的图形管线。 android在运行时可以有3个缓冲区.如果你需要另一个应用程序将阻塞直到其中的一个缓冲区释放出来。两个原因会发生这种情况。第一,你的应用在Dalvik中快速绘制但在GPU显示列表时候消耗了大量时间。第二,你的应用程序花了很长的时间来执行第几帧;一旦管线满了他将无法赶上,除非动画完成。

  一般都是蓝色部分时间消耗过长。怎么分析呢?

  利用android studio下面的android-cpu,在页面展示开始和结束的时候分别点击左边按钮一次,会生成一个.trace文件,如果需要时间更加准确的,可以在activity的onCreate()中添加Debug.startMethodTracing(), 而在onStop中添加Debug.stopMethodTracing();拿到这个.trace文件之后,在android sdk tools目录下,把这个.trace直接丢给traceview.bat。它会自动打开一个视图

技术分享

 接下来,只要选择上方一种颜色跨度最大的分析一下,看看到底是什么方法占用了如此多的时间。

  我发现解决的这个问题是因为在onDraw里面写了个Thread.sleep(40)。sleep都sleep40ms了,能不卡么,改成postDelayed,成功分析解决。

 

利用Traceview 解决页面卡顿问题

原文:http://www.cnblogs.com/liming-saki/p/5164054.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!