adb shell dumpsys window windows output describing
The explanation of the difference between mCurrentFocus
and mFocusedApp
stares right at you:
$ 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}}}
The mCurrentFocus
is a Window
(just a view
which may or may not have an ActivityRecord
associated with it)
The mFocusedApp
is an AppWindowToken
(an app
Token
which will always have an ActivityRecord
)
So when input focus switches to a view
with an activity
- both mCurrentFocus
and mFocusedApp
would show the same activity
. But sometimes focus switches to a view
without an activity
(like parts of SystemUI, etc) - then mCurrentFocus
will be showing that view
but mFocusedApp
will still be showing the ActivityRecord
of the app
which had the focus before the last switch.
Comments
-
t3ft3l--i almost 2 years
I'm using appium for interaction between my Android device and java code. And I faced with problem that on some kind of devices(including emulators) after pressing on Home button, appium return incorrect current activity (it returns previous activity which is currently must be minimized). I found that appium used
dumpsys window windows
with grabbingmFocusedApp
value for getting current app. I read another answers about getting Android current activities, and mostly it recommend to use:adb shell "dumpsys window windows | grep -E 'mCurrentFocus|mFocusedApp'"
That was the source of the problem, because after pressing Home button
mCurrentFocus
andmFocusedApp
linked to different activities. But I can't find any explanation the difference between these fields. And why appium uses onlymFocusedApp
for it?