I'm using appuim 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 previuos activity which is currently must be minimized). I found that appium used dumpsys window windows
with grabbing mFocusedApp
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
and mFocusedApp
linked to different activities. But I can't find any explanation the difference between these fields. And why appuim uses only mFocusedApp
for it?
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.