美文网首页
卡顿问题分析-工具使用实录

卡顿问题分析-工具使用实录

作者: new_xd | 来源:发表于2018-12-11 18:44 被阅读0次

    问题

    1. 有的时候界面很卡,我们该如何定位?

    现状

    面试过很多人,对于这个问题,大部分都是这样回答的:

    分情况:
    1. 启动卡顿,应该看下都有哪些耗时操作,尝试延后执行
    2. 滑动卡顿,考虑优化view复用
    3. 交互优化,有些是等待IO
    另外从 内存泄露 界面布局层次 界面重复渲染方面找问题
    

    虽然不能说是错误的,但是整体的来说都是依靠经验和审代码,很少涉及工具使用,很难做到问题的准确定位,更不用说优化了

    实践记录

    现象描述

    我们有一个界面,打开之后会根据状态自动滑动到第二个tab页,但是在滑动过程中比较卡,期望优化

    分析

    整个操作涉及两部分:页面启动,tab滑动,
    第一部分因为是原位置从无到有,而且有loading,所以用户感知不大,第二部分因为涉及页面内容滑动,所以特别明显。

    所谓的卡顿,其实对技术而言就是掉帧,简单说就是界面的渲染流程没能在16ms内完成,所以我们需要知道渲染流程每个阶段大致用了多少时间,哪个过程耗时较多

    工具上场

    GPU呈现模式分析

    打开设置-开发者选项-GPU呈现模式分析,选择在屏幕上显示为条形图。
    此时我们可以看到屏幕上多出了很多柱条,条形图含义请参考下面的链接说明。
    进行复现操作,我们发现柱条很少,每一个都超出了16ms的准线,而且深绿色偏长,说明我们在主线程做了很多和UI无关的耗时操作。

    CPU Profiler

    设备连上studio, 打开Android Profiler, 选择CPU,使用说明请参考下面链接。
    点击record,进行复现操作,停止record。
    检查记录,此时可能有朋友会问这个结果怎么看,我简单说下

    因为我们分析的是卡顿,主要看主线程,所以首先选择主线程,然后通过Call chart我们可以看到主线程的方法执行,
    一般是loop对事件分发然后各种处理,我在实际操作时就可以看到onCreate执行了多长时间,而其中onCreate里的每个方法执行了多长时间,还有一些切换到主线程的回调执行了多长时间,还有onResume执行了多少时间。

    通过这个结果我大概发现了一些造成卡顿的问题:

    1. 部分工具类的实际耗时比想象的长
    2. 网络请求的回调在主线程执行,而其中涉及一些大数据json的解析耗时较长
    3. 部分view是根据数据动态生成的,创建一个自定义view耗时较长,主要原因是view的xml较复杂
    4. Presentation的show方法执行耗时特别长

    Systrace

    这个工具我也有尝试,但是效果不好,使用说明请参考下面链接。
    好处是它会直接告诉你一些程序的问题,比如主线程调度delay、draw方法执行过程、measure时间过长,
    坏处或者说不好用的地方,在我的电脑上 Ubuntu 16.04, 这个工具无法指定检测时长无论是否指定-t参数,而且有时会记录其他app而不记录我想检测的app,即使添加-a参数,另外有一些时候生成的报告无法打开,好像是时间设置问题,但是网上没有搜索到相关解决方案。大家有空可以尝试下。

    解决方案

    将耗时操作移入子线程,并且注意子线程的优先级要低于主线程。

    参考

    GPU呈现模式分析
    CPU Profiler
    Systrace

    相关文章

      网友评论

          本文标题:卡顿问题分析-工具使用实录

          本文链接:https://www.haomeiwen.com/subject/xomehqtx.html