Оболочка adb выводит описание окон окна дампсис
Я использую appuim для взаимодействия между моим Android-устройством и Java-кодом. И я столкнулся с проблемой, что на некоторых устройствах (включая эмуляторы) после нажатия на кнопку "Домой" приложение возвращает неверную текущую активность (возвращает предыдущую активность, которая в настоящее время должна быть сведена к минимуму). Я обнаружил, что использовался аппиум dumpsys window windows
с захватом mFocusedApp
значение для получения текущего приложения. Я прочитал еще один ответ о том, как получить Android текущие действия, и в основном я рекомендую использовать:
adb shell "dumpsys window windows | grep -E 'mCurrentFocus|mFocusedApp'"
Это было источником проблемы, потому что после нажатия кнопки "Домой" mCurrentFocus
а также mFocusedApp
связаны с различными видами деятельности. Но я не могу найти никакого объяснения разницы между этими полями. И почему appuim использует только mFocusedApp
для этого?
2 ответа
Объяснение разницы между mCurrentFocus
а также mFocusedApp
смотрит прямо на тебя:
$ dumpsys окно 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
из app
который имел фокус перед последним переключателем.
Попробуйте это: Для окон:
adb shell dumpsys window | find "mCurrentFocus"
Для МАК:
adb shell dumpsys window | grep -E 'mCurrentFocus'