21.10.9 dumpsys

特别申明:本文仅供自己学习记录使用,所写内容来自各网页,如需转载自己去查找内容出处。如有侵权请联系在下,评论、私信等不论。

目录

一、system_server

1.简介

2.SystemServer中启动服务列表 

3.服务的添加

4.应用端服务的调用

二、dumpsys命令

1.dumpsys命令用法

2.dumpsys activity 介绍

1 简介

2.dumpsys activity

三、service中dump函数


一、system_server

1.简介

  SystemServer的进程名实际上叫做“system_server”,通常简称为SS。

  系统中的服务驻留在其中,常见的比如WindowManagerServer(Wms)、ActivityManagerSystemService(AmS)、 PackageManagerServer(PmS)等,

        这些系统服务都是以一个线程的方式存在于SystemServer进程中。

   SS是由Zygote通过Zygote.forkSystemServer函数fork诞生出来的。与Zygote生死与共.SS诞生后,便和生父Zygote分道扬镳,它有了自己的历史使命。
      ZygoteInit分裂产生的SS,其实就是为了调用com.android.server.SystemServer(SystemServer.java)的main函数:其中主要调用init1,init2函数.

        启动了 c++运行时库,如:sqllite,OpenGL ES等,然后把调用线程加入Binder通信中。

         init2在Java层,就是单独创建一个线程,用以启动系统各项服务,如:ActivityManagerService,PowerManagerService,BatteryService,WindowManagerService.

          这些服务都是线程,在SystemServer进程中.

2.SystemServer中启动服务列表 

这部分的服务大部分都有一个供应用进程使用的manager类,这就是一个RPC调用,用户通过调用xxxManager的方法,实际上被Binder给

迁移到system_server进程中对应的xxxManagerService中对应的方法,并将结果再通过binder带回。xxxManager的实现可参考CSDN : service_system

服务类名称

描述

对应的代理类
EntropyService提供伪随机数
PowerManagerService电源管理服务PowerManager
ActivityManagerService最核心的服务之一,管理 ActivityActivityManager
TelephonyRegistry通过该服务注册电话模块的事件响应,比如重启、关闭、启动等TelephonyManager
PackageManagerService程序包管理服务PackageManager
AccountManagerService账户管理服务,是指联系人账户,而不是 Linux 系统的账户AccountManager
ContentServiceContentProvider 服务,提供跨进程数据交换ContentResolver
BatteryService电池管理服务
LightsService自然光强度感应传感器服务
VibratorService震动器服务SystemVibrator
AlarmManagerService定时器管理服务,提供定时提醒服务AlarmManager
WindowManagerServiceFramework 最核心的服务之一,负责窗口管理WindowManager
BluetoothService蓝牙服务BluetoothDevice
DevicePolicyManagerService提供一些系统级别的设置及属性DevicePolicyManager
StatusBarManagerService状态栏管理服务StatusBarManager
ClipboardService系统剪切板服务
InputMethodManagerService输入法管理服务InputMethodManager
NetStatService网络状态服务
NetworkManagementService网络管理服务NetworkManagement
ConnectivityService网络连接管理服务ConnectivityManager
ThrottleService暂不清楚其作用
AccessibilityManagerService辅助管理程序截获所有的用户输入,并根据这些输入给用户一些额外的反馈,起到辅助的效果AccessibilityManager
MountService挂载服务,可通过该服务调用 Linux 层面的 mount 程序
NotificationManagerService通知栏管理服务, Android 中的通知栏和状态栏在一起,只是界面上前者在左边,后者在右边NotificationManager
DeviceStorageMonitorService磁盘空间状态检测服务DeviceStorageMonitor
LocationManagerService地理位置服务LocationManager
SearchManagerService搜索管理服务SearchManager
DropBoxManagerService通过该服务访问 Linux 层面的 Dropbox 程序DropBoxManager
WallpaperManagerService墙纸管理服务,墙纸不等同于桌面背景,在 View 系统内部,墙纸可以作为任何窗口的背景WallpaperManager
AudioService音频管理服务
BackupManagerService系统备份服务BackupManager
AppWidgetServiceWidget 服务
RecognitionManagerService身份识别服务RecognitionManager
DiskStatsService磁盘统计服务

3.服务的添加

4.应用端服务的调用

方法一:使用Broadcast
我们知道使用Broadcast广播可以实现跨进程的消息传递,一些系统服务也使用了这种方法。如电池管理服务BatteryManagerService,收到底层上报的电池状态变化信息时,就将当

前的电池状态封装在一个Intent里,action为android.intent.action.BATTERY_CHANGED。应用只要注册一个对应的BroadcastReceiver就可以收到BatterManagerService发送的电池状态信息。

方法二:通过代理类

在本地应用建立其对象,如ActivityManager,PowerManager,LocationManager的对象,通过其即可调用对应的服务。实例如下:

//获得定位服务
LocationManager locationManager =
(LocationManager) getSystemService(Context.LOCATION_SERVICE);

//定义定位监听器
LocationListener locationListener = new LocationListener() {
public void onLocationChanged(Location location) {
//监听到位置信息
}
...
};

//注册监听器
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,
0, 0, locationListener);

hint:使用AIDL定义一套接口,由系统服务端实现这些接口,应用端使用一个相应的代理就可以访问系统服务的接口,那反过来让应用端实现AIDL接口,系统服务端使用代理调用应用端

的接口。可参考:CSDN : service_system.

二、dumpsys命令

1.dumpsys命令用法

可通过dumpsys命令查询系统服务的运行状态(对象的成员变量属性值),命令格式:dumpsys 服务名,更多服务名查看表一、二。 例如:

dumpsys activity //查询AMS服务相关信息
dumpsys window //查询WMS服务相关信息
dumpsys cpuinfo //查询CPU情况
dumpsys meminfo //查询内存情况

可查询的服务有很多,可通过下面任一命令查看当前系统所支持的dump服务:

adb shell dumpsys -l
adb shell service list

表一:

服务名类名功能
activityActivityManagerServiceAMS相关信息
packagePackageManagerServicePMS相关信息
windowWindowManagerServiceWMS相关信息
inputInputManagerServiceIMS相关信息
powerPowerManagerServicePMS相关信息
batterystatsBatterystatsService电池统计信息
batteryBatteryService电池信息
alarmAlarmManagerService闹钟信息
dropboxDropboxManagerService调试相关
procstatsProcessStatsService进程统计
cpuinfoCpuBinderCPU
meminfoMemBinder内存
gfxinfoGraphicsBinder图像
dbinfoDbBinder数据库

表二:

服务名功能
SurfaceFlinger图像相关
appopsapp使用情况
permission权限
processinfo进程服务
batteryproperties电池相关
audio查看声音信息
netstats查看网络统计信息
diskstats查看空间free状态
jobscheduler查看任务计划
wifiwifi信息
diskstats磁盘情况
usagestats用户使用情况
devicestoragemonitor设备信息

参考:简书

2.dumpsys activity 介绍

1 简介

1.1 命令格式

dumpsys activity [options] [WHAT]

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

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

1.2 WHAT参数

列举常见的WHAT参数:

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

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

2.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
参考:个人博客

三、service中dump函数

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值