查看com.android.systemui当前的信息状态
1.adb命令:
adb shell dumpsys activity service com.android.systemui
2.结果:
SERVICE com.android.systemui/.ImageWallpaper 274d3e3 pid=779 user=0
Client:
State of wallpaper com.android.systemui.ImageWallpaper@36eba43:
Engine com.android.systemui.ImageWallpaper$GLEngine@5b7e8c0:
mInitializing=false mDestroyed=false
mVisible=true mReportedVisible=true
mDisplay=Display id 0: DisplayInfo{"内置屏幕", displayId 0", displayGroupId 0, FLAG_SECURE, FLAG_SUPPORTS_PROTECTED_BUFFERS, FLAG_TRUSTED, real 800 x 1280, largest app 1184 x 1136, smallest app 800 2, appVsyncOff 1000000, presDeadline 21276595, mode 1, defaultMode 1, modes [{id=1, width=800, height=1280, fps=47.0, alternativeRefreshRates=[]}], hdrCapabilities HdrCapabilities{mSupportedHdrTypes=[], mMaxLuminance=500.0, mMaxAverageLuminance=500.0, mMinLuminance=0.0}, userDisabledHdrTypes [], minimalPostProcessingSupported false, rotation 0, state ON}, DisplayMetrics{density=2.0, width=800, height=1184, scaledDensity=2.0, xdpi=320.0, ydpi=320.0}, isValid=true
mCreated=true mSurfaceCreated=true mIsCreating=false mDrawingAllowed=true
mWidth=1280 mCurWidth=1280 mHeight=1280 mCurHeight=1280
mType=-1 mWindowFlags=16 mCurWindowFlags=16
mWindowPrivateFlags=33554436 mCurWindowPrivateFlags=33554436
mWinFrames=
ClientWindowFrames{frame=[0,0][1280,1280] display=[-10000,-10000][10000,10000] backdrop=[0,0][1280,1280]}
mConfiguration={1.0 ?mcc?mnc [zh_CN] ldltr sw400dp w400dp h568dp 320dpi nrml port finger -keyb/v/h -nav/h winConfig={ mBounds=Rect(0, 0 - 800, 1280) mAppBounds=Rect(0, 0 - 800, 1184) mMaxBounds=Rect(0, 0 - 800, 1280) mWindowingMode=fullscreen mDisplayWindowingMode=fullscreen mActivityType=undefined mAlwaysOnTop=undefined mRotation=ROTATION_0} as.2 s.10 fontWeightAdjustment=0}
mLayout={(0,0)(1280x1280) gr=TOP START CENTER ty=WALLPAPER fmt=RGBX_8888 wanim=0x103030e
fl=NOT_FOCUSABLE NOT_TOUCHABLE LAYOUT_IN_SCREEN LAYOUT_NO_LIMITS LAYOUT_INSET_DECOR
pfl=WANTS_OFFSET_NOTIFICATIONS USE_BLAST
bhv=DEFAULT}
mZoom=0.0
mPreviewSurfacePosition=null
mPendingXOffset=0.0 mPendingXOffset=0.0
等等......
3.执行流程和原理解释:
🔍 什么是 activity service
?
在 adb shell dumpsys
命令中:
adb shell dumpsys activity service com.android.systemui
activity
:表示你正在访问的是 ActivityManagerService(AMS) 提供的功能。service
:AMS是管理service这个抽象类的组件
所以,这条命令的意思是:
“请通过 ActivityManagerService 找到
com.android.systemui
这个 SystemUIService,并调用它的 dump() 方法输出调试信息”
🧠 Android 系统中 Service 的 dump 机制
Android 中的每个service都可以重写以下方法:
protected void dump(FileDescriptor fd, PrintWriter pw, String[] args)
当执行 adb shell dumpsys activity service <PACKAGE_NAME>
时,系统会:
- 找到运行中的、由
ActivityManagerService
管理的对应包名的 Service。 - 调用该 Service 的
dump()
方法。 - 输出调试信息到控制台。
📌 以 SystemUIService
为例
你看到的这个类:
public class SystemUIService extends Service
它重写了 dump()
方法:
@Override
protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
mDumpHandler.dump(fd, pw, args);
}
而 mDumpHandler.dump(...)
最终会调用到 DumpManager 的 dumpDumpables(),从而触发所有注册了并实现了 Dumpable的类的 dump()方法。
✅ 总结:activity service
的含义
命令部分 | 含义 |
---|---|
adb shell dumpsys |
调用 Android 的 dumpsys 工具 |
activity |
表示你要访问的是 ActivityManagerService(AMS) |
service |
表示你要 dump 的是一个系统服务(Service) |
com.android.systemui |
要 dump 的服务所属的包名 |
SystemUIService.dump() |
实际被调用的方法,最终调用 DumpManager的 dumpDumpables(),从而触发所有注册了并实现了 Dumpable的类的 dump()方法。 |
📚 类比理解
你可以把 adb shell dumpsys activity service com.android.systemui
理解为:
“请让系统找到 SystemUI 这个服务自己的dump架构,然后让它自己打印出当前所有注册的调试信息。”
这些调试信息包括:
- 状态栏、通知栏的状态
- 电池信息
- 悬浮窗、手势、导航栏等模块的运行状态
- 各种日志缓冲区的内容
💡 小技巧:如何只 dump 某个模块?
如果你只想看某个模块的调试信息,可以加参数:
adb shell dumpsys activity service com.android.systemui | grep -A 20 "StatusBar"
或者:
adb shell dumpsys activity service com.android.systemui --target=StatusBar
前提是你在 DumpManager中实现了dump 的逻辑。
如需进一步了解 dumpsys
命令的使用方式,也可以运行:
adb shell dumpsys --help