2021-09-29 dump、system_service

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

目录

一、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函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值