Android dumpsys工具分析
来源:互联网 发布:mysql时间格式 编辑:程序博客网 时间:2024/05/17 07:22
dumpsys工具使用
我们知道Android使用ServiceManager服务进程来管理系统所有的服务,在系统启动时,每个服务必须注册到ServiceManager进程中,那如何查看系统运行了那些服务呢?ServiceManager提供了listServices接口来罗列出系统注册的所有服务。Android提供了dumpsys工具来dump出所有的服务信息,通过以下命令可以查看系统注册的所有服务:
adb shell dumpsysCurrently running services:
SurfaceFlinger
country_detector
cpuinfo
dbinfo
device_policy
devicestoragemonitor
diskstats
drm.drmManager
dropbox
entropy
fm
gfxinfo
hardware
input
isms
location
lock_settings
meminfo
network_management
notification
package
permission
phone
power
samplingprofiler
scheduling_policy
search
sensorservice
serial
servicediscovery
sim_manager
simphonebook
...
-------------------------------------------------------------------------------
DUMP OF SERVICE SurfaceFlinger:
Visible layers (count = 4)
...
也可以dump指定服务信息:
adb shell dumpsys SurfaceFlingerVisible layers (count = 4)
+ Layer 0x41ba5008 (com.android.settings/com.android.settings.SprdUsbSettings)
Region transparentRegion (this=0x41ba51e4, count=0)
Region transparentRegionScreen (this=0x41ba503c, count=0)
Region visibleRegionScreen (this=0x41ba5018, count=0)
z= 21005, pos=(0,0), size=( 480, 854), crop=( 0, 38, 480, 854), isOp
aque=1, needsDithering=0, invalidate=0, alpha=0x00, flags=0x00000001, tr=[1.00,
0.00][0.00, 1.00]
client=0x41c14ee0, identity=7
format= 2, activeBuffer=[ 480x 854: 480, 2], transform-hint=0x00, queued-
frames=0, mRefreshPending=0
...
dumpsys源码分析
dumpsys工具比较简单,就是调用ServiceManager服务的listServices来查询系统注册的所有服务,并且通过checkService接口来获取服务的Binder远程代理对象,使用每个服务的dump函数来打印该服务的相关信息。
frameworks\native\cmds\dumpsys\dumpsys.cpp
int main(int argc, char* const argv[]){ signal(SIGPIPE, SIG_IGN); //取得ServiceManager服务的远程Binder代理对象 sp<IServiceManager> sm = defaultServiceManager(); fflush(stdout); if (sm == NULL) {ALOGE("Unable to get default service manager!"); aerr << "dumpsys: Unable to get default service manager!" << endl; return 20; } Vector<String16> services; Vector<String16> args; //如果命令行参数只有1个 if (argc == 1) { //使用ServiceManager服务的Binder远程代理对象查询所有的服务 services = sm->listServices(); services.sort(sort_func); args.add(String16("-a")); } else { //添加命令行指定的服务及参数 services.add(String16(argv[1])); for (int i=2; i<argc; i++) { args.add(String16(argv[i])); } } //根据服务名称查找服务对应的Binder代理对象,如果存在,打印该服务 const size_t N = services.size(); if (N > 1) { // first print a list of the current services aout << "Currently running services:" << endl; for (size_t i=0; i<N; i++) { sp<IBinder> service = sm->checkService(services[i]); if (service != NULL) { aout << " " << services[i] << endl; } } } //调用服务的dump函数打印服务相关信息 for (size_t i=0; i<N; i++) { sp<IBinder> service = sm->checkService(services[i]); if (service != NULL) { if (N > 1) { aout << "------------------------------------------------------------" "-------------------" << endl; aout << "DUMP OF SERVICE " << services[i] << ":" << endl; } int err = service->dump(STDOUT_FILENO, args); if (err != 0) { aerr << "Error dumping service info: (" << strerror(err) << ") " << services[i] << endl; } } else { aerr << "Can't find service: " << services[i] << endl; } } return 0;}
- Android dumpsys工具分析
- Android dumpsys工具分析
- Android开发调试性能分析工具:dumpsys
- Android 性能分析工具dumpsys的使用
- Android 性能分析工具dumpsys的使用
- Android 性能分析工具dumpsys的使用
- Android 性能分析工具dumpsys的使用
- Android开发调试性能分析工具:dumpsys
- Android dumpsys工具
- android调试工具--dumpsys
- Android 性能优化 五 性能分析工具dumpsys的使用
- Android 性能优化 五 性能分析工具dumpsys的使用
- android dumpsys的一点分析
- Android 性能分析工具dumpsys的使用(自己增加一部分在后面)
- Android 性能分析工具dumpsys的使用(自己增加一部分在后面)
- android性能测试工具之dumpsys
- android性能测试工具之dumpsys
- android性能测试工具之dumpsys
- 移动互联网的未来-Webapp
- Android的盈利方式---学习别人的经验
- 深入理解Java内存模型(四)——volatile
- (译)碰撞检测和收集物品:如何使用cocos2d制作基于tiled地图的游戏:第二部分
- java多线程单例模式
- Android dumpsys工具分析
- Am335x 启动过程
- Android各种常见异常及处理----未完成
- 深入理解Java内存模型(六)——final
- MFC中创建动态控件的生成与响应
- 黑马学习笔记——jQuery UI Autocomplete 输入中文不自动完成问题解决方案
- 微信公众平台开发模式网页的BUG
- 7中排序算法的性能比较
- (译)加入敌人和战斗:如果使用cocos2d制作基于tiled地图的游戏:第三部分