ADB shell dumpsys window windows输出描述

8
我正在使用Appium在我的Android设备和Java代码之间进行交互。我遇到了一个问题,在某些设备(包括模拟器)上,按Home按钮后,appium返回不正确的当前活动状态(它返回当前应该最小化的上一个活动)。我发现appium使用dumpsys window windows来获取当前应用程序,并抓取mFocusedApp值。我阅读了另一些答案关于获取Android当前活动状态的内容,大多数建议使用:
adb shell "dumpsys window windows | grep -E 'mCurrentFocus|mFocusedApp'"

那就是问题的源头,因为按下Home按钮后,mCurrentFocusmFocusedApp链接到不同的活动。但我找不到这些字段之间的区别的任何解释。为什么appium只使用mFocusedApp呢?

问题“为什么Appium只使用mFocusedApp?”需要推测,不适合在这里讨论。 - Alex P.
2个回答

10

mCurrentFocusmFocusedApp的区别解释在这里:

$ dumpsys window windows | grep -E 'mCurrentFocus|mFocusedApp'
    mCurrentFocus=Window{X uX package/.activity}
    mFocusedApp=AppWindowToken{X token=Token{X ActivityRecord{X uX package/.activity tX}}}

mCurrentFocus是一个Window(只是一个view,可能有或没有与之关联的ActivityRecord)

mFocusedApp是一个AppWindowToken(一个app Token, 始终会有一个ActivityRecord)

因此,当输入焦点切换到具有activityview时,mCurrentFocusmFocusedApp都将显示同一个activity。但有时焦点会切换到没有activityview(例如SystemUI的一些部分等),那么mCurrentFocus将显示该view,但mFocusedApp仍然显示上次切换前拥有焦点的appActivityRecord


1
尝试这个: 对于Windows:
adb shell dumpsys window | find "mCurrentFocus" 

针对MAC:

adb shell dumpsys window | grep -E 'mCurrentFocus' 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接