我正在使用appuim进行Android设备和java代码之间的互动。我遇到问题,在按下Home按钮后某些设备(包括模拟器)上,appium返回不正确的当前活动(它返回当前必须最小化的previuos活动)。我发现appium使用dumpsys window windows
获取mFocusedApp
值来获取当前应用。我阅读another answers关于获取Android当前活动的信息,并且大多数建议使用:
adb shell "dumpsys window windows | grep -E 'mCurrentFocus|mFocusedApp'"
这是问题的根源,因为按下主页按钮mCurrentFocus
和mFocusedApp
链接到不同的活动。但我找不到任何解释这些领域之间的区别。为什么appuim只使用mFocusedApp
呢?
答案 0 :(得分:6)
mCurrentFocus
和mFocusedApp
之间的差异的解释盯着你:
$ 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
)
因此,当输入焦点切换到view
activity
时,mCurrentFocus
和mFocusedApp
都会显示相同的activity
。但有时焦点会切换到view
而没有activity
(类似于SystemUI的部分等) - 然后mCurrentFocus
会显示view
但mFocusedApp
仍会在最后一次切换之前显示焦点ActivityRecord
的{{1}}。