Оболочка 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 (appToken который всегда будет иметь 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' 
Другие вопросы по тегам