转:AMS之dumpsys篇
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                转:AMS之dumpsys篇
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                基于Android 7.0的源碼分析
一.概述
前面介紹過AMS相關的一些數據結構,每個數據結構有大量的成員變量,為了查詢當前手機運行時狀態的 變化值,可以通過dumpsys activity命令來完成,該方法最終是調用AMS.dump()方法。
dumpsys命令用法簡要介紹過dumpsys命令 的基本用法,以及系統服務列表信息,那么本文重點介紹AMS。 根據dumpsys activity傳遞不同的參數, 對于AMS.dump便會輸出相應的對象信息。 具體可以跟哪些參數.
1.1 命令格式
dumpsys activity [options] [WHAT] 復制代碼其中options為可選項,以-開頭, 主要有以下幾類:
| -a | 包括所有可用Server狀態 | 
| -c | 包括Client狀態,即App端情況 | 
| -p PACKAGE | 限定輸出指定包名 | 
1.2 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 broadcastsmHandler 復制代碼主要輸出的對象:
- 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/04/ams_dumpsys/
轉載于:https://juejin.im/post/5c067ed8f265da613b6f8bfa
總結
以上是生活随笔為你收集整理的转:AMS之dumpsys篇的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: Android Studio 3.3 B
- 下一篇: (八)ThreadLocal的使用及原理
