dumpsys activity用法彙總


2020年3月14日11:21:04


一、 概述

1.1 dumpsys 命令用法

可通過 dumpsys 命令查詢系統服務的運行狀態 (對象的成員變量屬性值),命令格式:dumpsys 服務名, 例如:

dumpsys activity 
dumpsys window 
dumpsys cpuinfo 
dumpsys meminfo

可查詢的服務有很多,可通過下面任一命令查看當前系統所支持的 dump 服務:

adb shell dumpsys -l
adb shell service list

1.2 系統服務

表一:

服務名 類名 功能
activity ActivityManagerService AMS 相關信息
package PackageManagerService PMS 相關信息
window WindowManagerService WMS 相關信息
input InputManagerService IMS 相關信息
power PowerManagerService PMS 相關信息
batterystats BatterystatsService 電池統計信息
battery BatteryService 電池信息
alarm AlarmManagerService 鬧鐘信息
dropbox DropboxManagerService 調試相關
procstats ProcessStatsService 進程統計
cpuinfo CpuBinder CPU
meminfo MemBinder 內存
gfxinfo GraphicsBinder 圖像
dbinfo DbBinder 數據庫

表二:

服務名 功能
SurfaceFlinger 圖像相關
appops app 使用情況
permission 權限
processinfo 進程服務
batteryproperties 電池相關
audio 查看聲音信息
netstats 查看網絡統計信息
diskstats 查看空間 free 狀態
jobscheduler 查看任務計劃
wifi wifi 信息
diskstats 磁盤情況
usagestats 用戶使用情況
devicestoragemonitor 設備信息

二、Activity 場景

dumpsys activity,用於查詢 AMS 服務相關信息,可跟不同的參數,更多信息見文章 AMS 之 dumpsys 篇

下面以新浪微博 App 作爲實例,由於輸出結果較多,每個場景截圖只挑選部分重要的信息。

場景 1:查詢某個 App 所有的 Service 狀態

dumpsys activity s com.sina.weibo

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-AdeTV8no-1584157696901)(http://gityuan.com/images/tools/dumpsys_service.png)]

解讀:

  • Service 類名爲com.morgoo.droidplugin.PluginManagerService
  • 運行在進程 pid=7220,進程名爲com.sina.weibo,uid=10094
  • 通過 bindService 連接該服務的進程 pid=7306,進程名爲com.sina.weibo:PluginP03

當然還有 packageName,baseDir(apk 路徑),dataDir(apk 數據路徑),createTime 等各種信息。另外,新浪微博採用的是 360 開源的 Android 插件機制 (com.morgoo.droidplugin),主要用於 hotfix 等功能。

場景 2:查詢某個 App 所有的廣播狀態

dumpsys activity b com.sina.weibo

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-Seq1cipx-1584157696904)(http://gityuan.com/images/tools/dumpsys_broadcast.png)]

解讀:

  • android.intent.action.SCREEN_ON 代表手機亮屏廣播;
  • 接收該廣播的 receiver 有很多個,其中一個所在進程爲 pid=7220,進程名爲com.sina.weibo

場景 3:查詢某個 App 所有的 Activity 狀態

輸出結果較多,尤其是View Hierarchy,下面截取部分:

dumpsys activity a com.sina.weibo

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-hsK9zj1b-1584157696904)(http://gityuan.com/images/tools/dumpsys_activity_task.png)]

解讀:

  • 格式:TaskRecord{Hashcode #TaskId Affinity UserId=0 Activity 個數 = 1};所以上圖信息解析後就是 TaskId=1802,Affinity=com.sina.weibo,當前 Task 中 Activity 個數爲 1。
  • effectiveUid 爲當前 task 所屬 Uid,mCallingUid 爲調用者 Uid=u0a94,mCallingPackage 爲調用者包名,這裏是com.sina.weibo
  • realActivity:task 中的已啓動的 Activity 組件名com.sina.weibo/.SplashActivity

場景 4:查詢某個 App 的進程狀態

dumpsys activity p com.sina.weibo

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-Vo5dZUFt-1584157696905)(http://gityuan.com/images/tools/dumpsys_processes.png)]

  • 格式:ProcessRecord{Hashcode pid: 進程名 / uid},進程 pid=7306,進程名爲com.sina.weibo:PluginP03,uid=10094.
  • 該進程中還有 Services,Connections, Providers, Receivers,可以看出該進程是沒有 Activity 的進程。

其他

還有很多場景,會用到不同的參數,這裏就不再一一列舉,建議大家多去嘗試,慢慢地就更加熟練,再比如:

dumpsys activity top 
dumpsys activity oom

基本使用命令:dumpsys activity -h

Activity manager dump options:
  [-a] [-c] [-p package] [-h] [cmd] ... //這個是後面可以跟的參數
  cmd may be one of: //這個代表可以跟的命令
    a[ctivities]: activity stack state //activity的棧信息
    r[recents]: recent activities state//最新的acivity的信息
    b[roadcasts] [PACKAGE_NAME] [history [-s]]: broadcast state//broadcastsde 相關信息
    i[ntents] [PACKAGE_NAME]: pending intent state//intent的信息
    p[rocesses] [PACKAGE_NAME]: process state//進程相關的信息
    o[om]: out of memory management//內存溢出
    prov[iders] [COMP_SPEC ...]: content provider state//provider信息
    provider [COMP_SPEC]: provider client-side state
    s[ervices] [COMP_SPEC ...]: service state
    as[sociations]: tracked app associations
    service [COMP_SPEC]: service client-side state
    package [PACKAGE_NAME]: all state related to given package
    all: dump all activities //輸出所有的activity信息
    top: dump the top activity//輸出當前棧頂的activity信息
    write: write all pending state to storage
    track-associations: enable association tracking
    untrack-associations: disable and clear association tracking
  cmd may also be a COMP_SPEC to dump activities.
  COMP_SPEC may be a component name (com.foo/.myApp),
    a partial substring in a component name, a
    hex object identifier.
  -a: include all available server state.
  -c: include client state.
  -p: limit output to given package.

常見的命令使用介紹

1.dumpsys activity top

拿到一個新的 app,我們經常定位當前的焦點 activoty 的名字。
這個命令就可以顯示,而且還可以顯示包含的 fragment‘的信息、

2.dumpsys activity | grep run

過濾目前的所有的 activity 棧信息。

3.dumpsys activity -p 包名

過濾一個包的信息。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章