在Android App开发时经常会用到dump来调试。
之前有一次给状态栏设置颜色时,没有生效。
所以需要看DisplayPolicy的一些状态,正好在这个类下面能看到有dump方法。
接下来主要以 dumpsys activity activities 为例,分析这条命令如何解析到DisplayPolicy的。
阅读下文前,请先阅读此文 dumpsys原理简介
由上面可以知道 dumpsys activity 会直接到 ActivityManagerService的dump方法。
先上图,一图胜千言
dumpsys activity activities流程.png
接下来逐个分析
- PriorityDump 优先级策略
需要在命令上加--dump-priority,有这几种
CRITICAL、HIGH、NORMAL,不是很懂!
从代码调用上看还是会调用回ActivityManagerService - 从 ActivityTaskManagerInternal 到 ActivityTaskManagerService
在ActivityManagerService中的doDump会调用 mAtmInternal.dump
而这个mAtmInternal = LocalServices.getService(ActivityTaskManagerInternal.class);
而LocalServices.java提供了几个静态方法
getService和addService,其实可以理解成就是个全局的Map
在启动ActivityTaskManagerService时,会调用start方法,从而addService添加进去。
所以mAtmInternal最后是调用的ActivityTaskManagerService - 解析activities部分
在ActivityTaskManagerService的dump方法中,会通过if判断,如果参数是activities或a,则调用dumpActivitiesLocked方法
基本上就是这样,总的来说dump流程是比较简单的,后面的几个类就要结合着你调试的需要来看即可。
最后还留个尾巴,如果我在查看源码时,发现某个类需要dump出来看看,那么如何找到这个对应的命令呢?
目前我的做法是将全部dump出来,再反查,这样有点笨,而且比较费时,有没有什么更好的做法 ,有谁知道麻烦告知下,谢谢!
网友评论