dumpsys window 如何查看当前top window
时间: 2024-01-27 09:03:25 浏览: 288
要查看当前的 top window,可以在执行 "dumpsys window" 命令时加上参数 "-a",它将打印出当前窗口系统的所有信息,包括当前的 top window。具体操作步骤如下:
1. 在终端或命令行窗口中,输入以下命令:
adb shell dumpsys window -a
2. 执行命令后,等待一段时间,直到命令执行完毕。
3. 在命令行窗口中,查找 "mCurrentFocus" 字段,它将显示当前的 top window 的名称和 ID。例如:
mCurrentFocus=Window{4250c968 u0 com.android.settings/com.android.settings.Settings$WifiSettingsActivity}
这个例子中,当前的 top window 是 "com.android.settings.Settings$WifiSettingsActivity"。
需要注意的是,如果当前没有任何窗口处于焦点状态,那么 "mCurrentFocus" 字段将会显示为 "null"。
相关问题
dumpsys window | grep display | grep 'imeInputTarget' | cut -d'#' -f2 | awk '{print $1}' && dumpsys window | grep display | grep 'imeInputTarget' | cut -d'#' -f2 | awk '{print $NF}' | cut -d'}' -f1 0 2 com.ktcp.video/com.ktcp.video.activity.ScreenSaverActivity com.tencent.start.tv/com.tencent.start.ui.SplashActivity
这个命令输出了当前输入法窗口所在应用的包名和窗口信息。其中,`com.ktcp.video/com.ktcp.video.activity.ScreenSaverActivity` 表示第一个应用程序的栈顶 Activity 是 `ScreenSaverActivity`,而 `com.tencent.start.tv/com.tencent.start.ui.SplashActivity` 则表示第二个应用程序的栈顶 Activity 是 `SplashActivity`。
如果你只想要包名和栈顶 Activity 的信息,可以使用以下命令:
```
adb shell dumpsys window windows | grep -E 'mCurrentFocus|mFocusedApp' && adb shell dumpsys activity top | grep 'ACTIVITY' | head -n 2 | awk -F ' ' '{print $4}'
```
这个命令会先输出当前焦点窗口所在应用的信息,然后输出前两个 Activity 的包名和类名,即第一个应用程序的栈顶 Activity 和第二个应用程序的栈顶 Activity。你可以根据需要对输出结果进行处理,提取出包名和栈顶 Activity 的信息。
dumpsys window | grep display WINDOW MANAGER DISPLAY CONTENTS (dumpsys window displays) displayId=2 Task display areas in top down Z order: mDisplayCutout=DisplayCutout{insets=Rect(0, 0 - 0, 0) waterfall=Insets{left=0, top=0, right=0, bottom=0} boundingRect={Bounds=[Rect(0, 0 - 0, 0), Rect(0, 0 - 0, 0), Rect(0, 0 - 0, 0), Rect(0, 0 - 0, 0)]} cutoutPathParserInfo={CutoutPathParserInfo{displayWidth=0 displayHeight=0 density={0.0} cutoutSpec={} rotation={0} scale={0.0}}}} displayId=0 Task display areas in top down Z order: mDisplayCutout=DisplayCutout{insets=Rect(0, 0 - 0, 0) waterfall=Insets{left=0, top=0, right=0, bottom=0} boundingRect={Bounds=[Rect(0, 0 - 0, 0), Rect(0, 0 - 0, 0), Rect(0, 0 - 0, 0), Rect(0, 0 - 0, 0)]} cutoutPathParserInfo={CutoutPathParserInfo{displayWidth=0 displayHeight=0 density={0.0} cutoutSpec={} rotation={0} scale={0.0}}}} imeLayeringTarget in display# 0 Window{6c47b4e u0 com.ktcp.video/com.ktcp.video.activity.ScreenSaverActivity} imeInputTarget in display# 0 Window{6c47b4e u0 com.ktcp.video/com.ktcp.video.activity.ScreenSaverActivity} imeControlTarget in display# 0 Window{6c47b4e u0 com.ktcp.video/com.ktcp.video.activity.ScreenSaverActivity} imeInputTarget in display# 2 Window{d963b95 u0 com.tencent.start.tv/com.tencent.start.ui.SplashActivity} imeControlTarget in display# 2 Window{d963b95 u0 com.tencent.start.tv/com.tencent.start.ui.SplashActivity}
好的,在这个输出中,我们可以看到两个显示器,分别是 `displayId=2` 和 `displayId=0`。`am start` 命令的 `--display` 参数可以用来指定应用程序启动的显示器。例如,如果我们想要在第二个显示器上启动应用程序 `com.tencent.start.tv/com.tencent.start.ui.SplashActivity`,可以使用以下命令:
```shell
am start -n com.tencent.start.tv/com.tencent.start.ui.SplashActivity --display 2
```
类似地,如果我们想要在第一个显示器上启动应用程序 `com.ktcp.video/com.ktcp.video.activity.detail.DetailCoverActivity`,可以使用以下命令:
```shell
am start -n com.ktcp.video/com.ktcp.video.activity.detail.DetailCoverActivity --display 0
```
请注意,在这些命令中,`-n` 参数用于指定应用程序的包名和 Activity 名称。`--display` 参数用于指定应用程序启动的显示器编号。
阅读全文