Android卡顿优化

我们知道,当APP进程的UI Thread和Render Thread在接到VSync信号后,绘制一帧所花的时间超过16.6ms,APP就会发生掉帧,实际上,在画面显示时,不仅仅和当前帧的数据有关,还跟相邻帧的步长有关系,如果相邻的步长没有规定到一个固定的范围内,用户也会感觉到明显的卡顿而Systrace看不出来。

 

工欲善其事必先利其器,我们一般通过以下几种方式分析卡顿。

SysTrace使用

1.首先要装Python 2.x的版本,SysTrace脚本不支持Python 3.x版本

2.cd命令进入到Android SDK下的SysTrace目录下(Users/zzy/Library/Android/sdk/platform-tools/systrace)执行命令:python systrace.py。

3.滑动要测试的场景即开始trace信息收集,命令行里按回车即开始生成trace.html文件。

注:抓取时可以配置一些参数,若不选择则默认全部抓取,

-o: 指定文件输出位置和文件名

-t: 抓取systrace的时间长度

-a: 指定特殊进程包名(自己加Label时必须加上)

trace文件如图:

 其中W、S、A、D键分别表示放大、缩小、左移、右移,红色或黄色的F则表示未能在16毫秒完成绘制的帧,我们可以点击并放大相应区域看到一些跟代码相关的信息,如图:

Profiler 的使用

打开Android Studio的Profiler工具,左侧session处选择我们要监控的进程,右侧看板点击CPU,即到如下界面,点击”Record“按钮,即可开始记录绘制:

 手动操作要监控的场景,操作完后,点击”stop“按钮,即生成可分析文件:

同样,我们依然可以使用W、S、A、D来查看trace文件,找出其中的长耗时方法,如图:

打开GPU过度绘制

从手机设置里找到 ”开发者选项“ --》”调试GPU过度绘制“,打开即可查看对应页面是否存在过度绘制的情况。

原色:没有OverDraw;蓝色:1次OverDraw;绿色:两次OverDraw;粉色:三次OverDraw;红色:四次及四次以上;

打开GPU呈现模式分析

从手机设置里找到 ”开发者选项“ -->”GPU呈现模式分析“即可。

这个工具主要用来反映界面的绘制情况,查看是否存在耗时操作,柱状图的每一根代表一帧,随着界面的滚动,柱状图代表每帧画面所需要的渲染时间,柱子越高表示需要花费时间越长。中间的一根横向绿线是标准线,我们要尽量确保绘制时间在标准线以内。 

贴一下我们优化前和优化后的效果对比:

总结卡顿优化点: 

  1. 主线程里频繁的网络请求;
  2. 主线程执行的耗时方法;
  3. UI布局层级太深,或者自定义View的onDraw()中有复杂计算;
  4. 频繁GC,内存抖动,消耗在GC上的时间越长,CPU花在界面绘制的时间就缩短;
  5. JSON转换;
  6. 减少非必须的UI绘制,比如ViewPager的设置预加载Page等;
  7. 频繁使用反射调用
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值