【发布时间】:2015-08-18 06:57:46
【问题描述】:
我想知道到底是怎么回事
adb shell dumpsys
工作原理以及它是如何在 AOSP 中实现的。 到目前为止我的理解是大部分系统服务都实现了
@Override
public void dump()
函数并使用它。但是哪个 java 类拥有这个函数,这个 @Override 指向哪个?
【问题讨论】:
标签: android adb android-source android-debug
我想知道到底是怎么回事
adb shell dumpsys
工作原理以及它是如何在 AOSP 中实现的。 到目前为止我的理解是大部分系统服务都实现了
@Override
public void dump()
函数并使用它。但是哪个 java 类拥有这个函数,这个 @Override 指向哪个?
【问题讨论】:
标签: android adb android-source android-debug
当调用adb shell dumpsys 时,会执行本机dumpsys 二进制文件,它会向IServiceManager 询问所有系统服务(Android 内置的服务)的列表并调用@987654321 @ 方法,将 FileDescriptor 设置为 STDOUT。更多信息请见平台dumpsys.cpp。
当使用adb shell dumpsys activity service <yourservicename> 时,它会在ActivityManagerService 上调用上面提到的相同转储方法,参数为service <yourservicename>,然后通过调用Service#dump(FileDescriptor fd, PrintWriter writer, String[] args) 将转储请求传递给您的服务(如果它正在运行)。
【讨论】:
Service#dump 方法并转储我的服务状态(dumpsys activity service <myservicename>),但是有什么方法可以转储我的Binders 状态吗?我有一个 Binder 覆盖 Binder#dump(FileDescriptor fd, PrintWriter fout, String[] args) 方法,但看不到任何从 dumpsys 调用它的方法
IBinder 类只是为了传递给客户端以促进通信,它不应该有任何状态供您转储。 系统服务的实现方式与常规应用程序服务不同,因此使用不同的转储方法。