2016-09-28 11 views
2

Ich verwende appuim für die Interaktion zwischen meinem Android-Gerät und Java-Code. Und ich habe mit dem Problem konfrontiert, dass auf irgendwelchen Geräten (einschließlich Emulatoren) nach dem Drücken der Home-Taste appium falsche aktuelle Aktivität zurückgibt (es gibt vorherige Aktivitäten zurück, die zurzeit minimiert werden müssen). Ich fand, dass Appium dumpsys window windows mit Grabbing mFocusedApp Wert für die aktuelle App verwendet. Ich las another answers über Android laufende Aktivitäten bekommen, und es meist zu verwenden, empfehlen:adb shell dumpsys Fenster Windows Ausgabe Beschreibung

adb shell "dumpsys window windows | grep -E 'mCurrentFocus|mFocusedApp'" 

, dass die Quelle des Problems war, denn nach Home-Taste drückt mCurrentFocus und mFocusedApp zu verschiedenen Aktivitäten verknüpft. Aber ich kann keine Erklärung für den Unterschied zwischen diesen Feldern finden. Und warum benutzt appuim nur mFocusedApp dafür?

+0

Die Frage * warum appuim nur 'mFocusedApp' verwendet? * Ruft zur Spekulation auf und ist hier ein off-topic. –

Antwort

4

Die Erklärung des Unterschieds zwischen mCurrentFocus und mFocusedApp starrt direkt an Sie:

 
$ 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}}} 

Die mCurrentFocus ist ein Window (nur ein view die damit verbundenen kann oder auch nicht eine ActivityRecord haben)

Die mFocusedApp ist eine AppWindowToken (eine appToken die immer einehaben wird 10)

Als Eingabefokus wechselt auf eine view mit einem activity - beide mCurrentFocus und mFocusedApp die gleiche activity zeigen würde. Aber manchmal konzentrieren schaltet auf einen view ohne activity (wie Teile SystemUI, etc.) - dann wird mCurrentFocus zeigen, dass view aber mFocusedApp noch die ActivityRecord der app zeigen, die den Fokus vor dem letzten Schalter hatte.