android 耗时分析,启动耗时分析(四)-具体方法耗时分析

原创文章,转载请注明出处,多谢!

如果cpu频率、调度 和 compiler filter都一一排除了,没问题。那接下来就看是否有具体方法耗时。

一、常用的分析手段:

1.systrace

这里可按systrace中各个阶段来逐段对比分析,当然这里也分冷热启。

冷启动可以拆分如下若干阶段:

deliver input / fork process / bind application / activity start / doFrame / drawFrame / SF invalidate&refresh

热启动就主要考虑绘制和渲染了。

看是否差距集中在一个某个阶段内,如果是特定区域的差异那么就来针对具体方法耗时进行分析。

找到有差异的阶段可以通过加trace,来缩小范围和细化具体方法。

各层加trace的方式:

APP:

Trace.beginSection("");

Trace.endSection();

注:抓systrace的时候需要指定对应的app进程。

系统java层:

Trace.traceBegin(Trace.TRACE_TAG_VIEW, "inflate”);

Trace.traceEnd(Trace.TRACE_TAG_VIEW);

注:前面的tag参数对应的抓systrace的开关选项。

Native:

#define ATRACE_TAG ATRACE_TAG_ALWAYS

#include // for c++

#include // for c

ATRACE_CALL();

or

ATRACE_BEGIN("");

ATRACE_END();

2. TraceView or AS profile cpu

对于app的问题,可以借助traceView 或者 as profile cpu检查 CPU Activity 和函数跟踪来帮助定位耗时方法,不断缩小范围来定位问题。

3. 反编译

对于三方app,没有源码,可以通过oatdump反编译来分析:

adb shell oatdump --oat-file=/data/app/包名/oat/arm64/base.odex > demo.txt

字节码命令说明

二、实战举例:高德地图耗时分析

1.发现问题

在cpu频率、调度 和 compiler filter都一一排除了的前提下,通过systrace来分析具体启动各阶段耗时情况。

Android N:

3ed1938ff75d

Android O:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值