AMS之dumpsys篇

作者: 安安_660c | 来源:发表于2022-12-14 16:31 被阅读0次

    基于Android 7.0的源码分析

    一.概述

    前面介绍过AMS相关的一些数据结构,每个数据结构有大量的成员变量,为了查询当前手机运行时状态的 变化值,可以通过dumpsys activity命令来完成,该方法最终是调用AMS.dump()方法。

    dumpsys命令用法简要介绍过dumpsys命令 的基本用法,以及系统服务列表信息,那么本文重点介绍AMS。 根据dumpsys activity传递不同的参数, 对于AMS.dump便会输出相应的对象信息。 具体可以跟哪些参数.

    1.1 命令格式

    dumpsys activity [options] [WHAT]
    
    

    其中options为可选项,以-开头, 主要有以下几类:

    options 含义
    -a 包括所有可用Server状态
    -c 包括Client状态,即App端情况
    -p PACKAGE 限定输出指定包名

    1.2 WHAT参数

    列举常见的WHAT参数:

    序号 WHAT 解释 对应源码
    1 a[ctivities] activity状态 dumpActivitiesLocked()
    2 b[roadcasts] [PACKAGE_NAME] broadcast状态 dumpBroadcastsLocked()
    3 s[ervices] [COMP_SPEC …] service状态 newServiceDumperLocked().dumpLocked
    4 prov[iders] [COMP_SPEC …] content provider状态 dumpProvidersLocked()
    5 p[rocesses] [PACKAGE_NAME] 进程状态 dumpProcessesLocked()
    6 o[om] 内存管理 dumpOomLocked()
    7 i[ntents] [PACKAGE_NAME] pending intent状态 dumpPendingIntentsLocked()
    8 r[ecents] 最近activity dumpRecentsLocked()
    9 perm[issions] URI授权情况 dumpPermissionsLocked()
    10 all 所有activities信息 dumpActivity()
    11 top 顶部activity信息 dumpActivity()
    12 package package相关信息 dump()

    其中PACKAGE_NAME是指可跟包名,COMP_SPEC是指可跟具体组件信息,中括号是指缩写字母;

    二. dumpsys activity

    前面介绍dumpsys activity根据后面跟着的不同参数则输出相应的内容,当不跟任何参数, dumpsys activity等价于依次输出下面8条命令:

    dumpsys activity intents
    dumpsys activity broadcasts //广播
    dumpsys activity providers  //provider
    dumpsys activity permissions
    dumpsys activity services  //服务
    dumpsys activity recents
    dumpsys activity activities //activity
    dumpsys activity processes
    
    

    依次简要说明这8条命令:

    2.1 intents

    //标志性开头,dumpPendingIntentsLocked
    ACTIVITY MANAGER PENDING INTENTS (dumpsys activity intents)
    
    

    输出对象:

    • PendingIntentRecord

    2.2 broadcasts

    //标志性开头,dumpBroadcastsLocked
    ACTIVITY MANAGER BROADCAST STATE (dumpsys activity broadcasts)
        Registered Receivers:
        Receiver Resolver Table:
        Historical broadcasts [foreground]:
        Historical broadcasts summary [foreground]:
        Historical broadcasts [background]:
        Historical broadcasts summary [background]:
        Sticky broadcasts
        mHandler
    
    

    主要输出的对象:

    • ReceiverList, BroadcastFilter,
    • IntentResolver,
    • BroadcastQueue, BroadcastRecord
    • Handler, Looper

    2.3 provider

    //标志性开头,dumpProvidersLocked
    ACTIVITY MANAGER CONTENT PROVIDERS (dumpsys activity providers)
        Published single-user content providers (by class):
        Published user [n] content providers (by class):
        Single-user authority to provider mappings:
        User [n] authority to provider mappings:
    
    

    主要输出的对象:

    • ProviderMap
    • ContentProviderRecord, ContentProviderConnection

    2.4 permissions

    //标志性开头,dumpPermissionsLocked
    ACTIVITY MANAGER URI PERMISSIONS (dumpsys activity permissions)
    
    

    主要输出的对象:

    • UriPermission

    2.5 Service

    //标志性开头,newServiceDumperLocked().dumpLocked
    ACTIVITY MANAGER SERVICES (dumpsys activity services)
    
    

    主要输出的对象:

    • ActiveServices,
    • ServiceRecord, ConnectionRecord,ProcessRecord

    2.6 recents

    //标志性开头,dumpRecentsLocked
    ACTIVITY MANAGER RECENT TASKS (dumpsys activity recents)
    
    

    主要输出的对象:

    • TaskRecord

    2.7 activities

    //标志性开头,dumpActivitiesLocked
    ACTIVITY MANAGER ACTIVITIES (dumpsys activity activities)
        Display #0 (activities from top to bottom):
          Stack #0:
            Task id #[n]
              * Hist #[m]:
          Stack #1:
    
    

    主要输出的对象:

    • ActivityStackSupervisor, ActivityStack,
    • TaskRecord, ActivityRecord
    • ActivityThread, Activity
    • ViewRootImpl
    • Looper, MessageQueue

    输出格式样例:

    //{Hashcode #TaskId Affinity UserId 该task的Activity个数};
    TaskRecord{e6d7a8e #156 A=com.gityuan.demo U=0 sz=1}
    userId=0 effectiveUid=1000 mCallingUid=1000 mCallingPackage=android
    realActivity=com.gityuan.demo/.Blog
    
    //ProcessRecord{Hashcode pid:进程名/uid}
    ProcessRecord{7c8a2af 12265:com.gityuan.demo/1000}
    
    

    2.8 processes

    //标志性开头,dumpProcessesLocked
    ACTIVITY MANAGER RUNNING PROCESSES (dumpsys activity processes)
        All known processes:
        Isolated process list (sorted by uid):
        UID states:
        UID validation:
        Process LRU list (sorted by oom_adj, 60 total, non-act at 2, non-svc at 2):
        PID mappings:
        Foreground Processes:
    
    

    主要输出的对象:

    • AMS各种进程对象
    • ProcessRecord, UidRecord

    本文转自 http://gityuan.com/2017/07/02/ams_dumpsys/,如有侵权,请联系删除。

    相关文章

      网友评论

        本文标题:AMS之dumpsys篇

        本文链接:https://www.haomeiwen.com/subject/mjklqdtx.html