有用Android小技巧

308 阅读2分钟

文章列举了一些我平时开发经常用到的一些命令或者日志,帮助排查问题或者解决问题。

1. ActivityTaskManager

这个是系统提供的Tag(logcat用这个tag过滤),在高版本上是“ActivityTaskManager”,低版本是“ActivityManager”,简直太好用了。

使用场景如下:

  • 定位当前页面Activity是哪个类

image.png

例如我打开了招商银行App,日志就显示了打开的是哪个Activity,还需要用Displayed来过滤下日志,同时也能看到这个页面创建时间。

  • Activity打开方式

如果想知道XXX应用push是怎么打开页面的,用这个命令也行。第一张是通过intent action来打开。第二张就是通过scheme打开。 activitymanager.png

image.png

还有其他场景就不一一列举,大家平时可以多用这个Tag过滤下日志,多看看系统都记录哪些tag。

2.打印应用启动耗时

使用adb shell获取应用的启动时间

// 其中的AppstartActivity全路径可以省略前面的
adb shell am start -W [packageName]/[AppstartActivity全路径]
MacBook-Pro:~ xuanxuan3$ adb shell am start -W cmb.pb/.app.mainframe.frame.PBEntryActivity

Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=cmb.pb/.app.mainframe.frame.PBEntryActivity }
Status: ok
Activity: cmb.pb/.app.mainframe.frame.PBEntryActivity
ThisTime: 1693
TotalTime: 1693
WaitTime: 1727
Complete

拿了招商银行(如何拿到招商银行入口Activity呢,就是通过刚刚的ActivityTaskManager + Displayed拿到的)为例子,打印了下招商银行的数据。 执行后会得到三个时间:ThisTime、TotalTime和WaitTime,详情如下:

  • ThisTime:表示最后一个Activity启动耗时。
  • TotalTime:表示所有Activity启动耗时。
  • WaitTime:表示AMS启动Activity的总耗时。

一般来说,只需查看得到的TotalTime,即应用的启动时间,其包括 创建进程 + Application初始化 + Activity初始化到界面显示 的过程。

3. dmtracedump

大家平时应该使用过Debug.startMethodTracing,但是可能不太好看,google提供了一个工具,可以把Debug生成的文件,生成图片来展示。

dmtracedump -g ~/Downloads/dmtracedump.png ~/Downloads/dmtrace.trace

工具1.png

或者使用github上的工具,可以专门过滤出你想要的数据:AppMethodOrder

有其他技巧后续更新。