adb shell
root@android#
运行 dumpsys [ option ]
eg:
dumpsys power //查看电源信息
dumpsys cpuinfo //查看cpu信息
dumpsys meminfo //查看内存信息
Currently running services:
SurfaceFlinger
accessibility
account
activity
接下来,来看看Android系统是如何实现dumpsys的。
dumpsys的代码在mydroid/frameworks/base/cmds/dumpsys/dumpsys.cpp
所有的dump信息都是由重载了Binder中的dump函数的类来完成:
@Override
protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
...
}
代码很简单,发现搜有dump的信息都是由defaultServiceManager(关于Android的ServiceManager的结构分析参见我之后的一篇文章)提供的由系统注册的所有service来提供信息。
以meminfo为例:
它是在mydroid/frameworks/base/services/java/com/android/server/am/ActivityManagerService.java中的setSystemProcess函数处被注册的
SrviceManager.addService("activity", m);
ServiceManager.addService("meminfo", new MemBinder(m));
...
MemBinder->ProcessRecord->各个正在运行状态的ApplicationThread的状态(mydroid/frameworks/base/core/java/android/app/ActivityThread.java),从中得到需要的meminfo信息。
这其中其实牵涉到负责的Android的是如何管理Linux的进程,同时又是如何把Linux的进程管理起来提供各种信息给Java层使用。
总之,关键还是package的管理和它的活动周期的管理问题。值得深入理解