赞
踩
dumpsys activity //查询AMS服务相关信息
dumpsys window //查询WMS服务相关信息
dumpsys cpuinfo //查询CPU情况
dumpsys meminfo //查询内存情况
dumpsys power //电源管理相关,包括待机休眠相关的都可以查看
dumpsys package //包管理相关
dumpsys -l //查看系统中所有的服务
dumpsys | grep “DUMP OF SERVICE” //同 dumpsys -l 差不多
dumpsys activity s // 查看app的所有service状态
dumpsys activity b // 查看app的所有广播状态
dumpsys activity top // 查看app的界面状态
dumpsys activity oom // 查看app的oom信息
dumpsys window windows | grep -E “mCurrentFocus|mFocusedApp” --color=always //通常通过这个命令实时查,当前最顶部的activity或者窗体
dumpsys SurfaceFlinger //通过这个查看系统图层,可以看到Acitivity 栈
dumpsys |grep BroadcastRecord //查看当前系统正在进行的广播
dumpsys package com.funshion.publicity | grep version //查看安装包的版本
dumpsys meminfo -h //查看meminfo 相关内容
dumpsys package f // 查看系统的所有Features
frameworks/native/cmds/dumpsys/dumpsys.cpp
int Dumpsys::main(int argc, char* const argv[]) { ... while (1) { //对参数进行解析 switch (c) { case 0: ... } else if (!strcmp(longOptions[optionIndex].name, "help")) { usage(); return 0; } ... case 'l'://展示所有服务 showListOnly = true; break; } } ... //查询服务是否存在 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]); } } for (size_t i = 0; i < N; i++) { const String16& serviceName = services[i]; if (IsSkipped(skippedServices, serviceName)) continue; if (startDumpThread(serviceName, args) == OK) { ... } } return 0; }
服务名 | 类名 | 功能 |
---|---|---|
package | PackageManagerService | PMS相关信息 |
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 | 数据库 |
以上所有的服务,都可以找到dump函数的实现。
ActivityManagerService extends IActivityManager.Stub ->
IActivityManager extends IInterface ->
public interface IInterface {
IBinder asBinder();
}
frameworks/base/core/java/android/os/Binder.java
protected void dump(@NonNull FileDescriptor fd, @NonNull PrintWriter fout,
@Nullable String[] args) {
}
frameworks/base/core/java/android/app/Service.java
protected void dump(FileDescriptor fd, PrintWriter writer, String[] args) {
writer.println("nothing to dump");
}
所有服务,继承了service ,并实现了dump 函数,就可以通过dumpsys 命令,查看服务的信息
那我们自己写的服务如何使用呢:
public class TestService extends Service {
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
protected void dump(FileDescriptor fd, PrintWriter writer, String[] args) {
writer.println("Test dump");
}
}
service启动之后就可以dumpsys activity service指令在命令行打印dump方法内容了:
这是什么原理呢?
frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java
private void doDump(FileDescriptor fd, PrintWriter pw, String[] args, boolean useProto) { ... if (opti < args.length) { String cmd = args[opti]; opti++; if ("activities".equals(cmd) || "a".equals(cmd)) { synchronized (this) { dumpActivitiesLocked(fd, pw, args, opti, true, dumpClient, dumpPackage); } } else if ("lastanr".equals(cmd)) { } else if ("starter".equals(cmd)) { } else if ("containers".equals(cmd)) { } else if ("recents".equals(cmd) || "r".equals(cmd)) { } else if ("binder-proxies".equals(cmd)) { } else if ("broadcasts".equals(cmd) || "b".equals(cmd)) { } else if ("broadcast-stats".equals(cmd)) { } else if ("intents".equals(cmd) || "i".equals(cmd)) { } else if ("processes".equals(cmd) || "p".equals(cmd)) { } else if ("oom".equals(cmd) || "o".equals(cmd)) { } else if ("permissions".equals(cmd) || "perm".equals(cmd)) { } else if ("provider".equals(cmd)) { } else if ("providers".equals(cmd) || "prov".equals(cmd)) { } else if ("service".equals(cmd)) { //相关的逻辑主要在这里,这里就不再展开了 } else if ("package".equals(cmd)) { } else if ("associations".equals(cmd) || "as".equals(cmd)) { } else if ("settings".equals(cmd)) { } else if ("services".equals(cmd) || "s".equals(cmd)) { } else if ("locks".equals(cmd)) { } else { } ... }
从上面的代码可以看到,dumpsys activity 后面还可以跟很多的参数,帮助我们查看更多的系统信息
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。