Android dump系统分析

2022-12-12  本文已影响0人  艾伦宇

在Android App开发时经常会用到dump来调试。
之前有一次给状态栏设置颜色时,没有生效。
所以需要看DisplayPolicy的一些状态,正好在这个类下面能看到有dump方法。

接下来主要以 dumpsys activity activities 为例,分析这条命令如何解析到DisplayPolicy的。

阅读下文前,请先阅读此文 dumpsys原理简介
由上面可以知道 dumpsys activity 会直接到 ActivityManagerService的dump方法。

先上图,一图胜千言


dumpsys activity activities流程.png

接下来逐个分析

  1. PriorityDump 优先级策略
    需要在命令上加--dump-priority,有这几种
    CRITICAL、HIGH、NORMAL,不是很懂!
    从代码调用上看还是会调用回ActivityManagerService
  2. 从 ActivityTaskManagerInternal 到 ActivityTaskManagerService
    在ActivityManagerService中的doDump会调用 mAtmInternal.dump
    而这个mAtmInternal = LocalServices.getService(ActivityTaskManagerInternal.class);
    LocalServices.java提供了几个静态方法
    getService和addService,其实可以理解成就是个全局的Map
    在启动ActivityTaskManagerService时,会调用start方法,从而addService添加进去。
    所以mAtmInternal最后是调用的ActivityTaskManagerService
  3. 解析activities部分
    在ActivityTaskManagerService的dump方法中,会通过if判断,如果参数是activities或a,则调用dumpActivitiesLocked方法

基本上就是这样,总的来说dump流程是比较简单的,后面的几个类就要结合着你调试的需要来看即可。

最后还留个尾巴,如果我在查看源码时,发现某个类需要dump出来看看,那么如何找到这个对应的命令呢?
目前我的做法是将全部dump出来,再反查,这样有点笨,而且比较费时,有没有什么更好的做法 ,有谁知道麻烦告知下,谢谢!

上一篇 下一篇

猜你喜欢

热点阅读