Was ist ein Android-Fenster?

75

Was ist ein Windowin Android?

Ich dachte, die oberste Ebene in Android heißt Activity, das ist der Bildschirm, den Sie sehen.

Kann mir jemand sagen, was ein Fenster in Android ist? Haben wir nur einen oder mehrere von ihnen?

user1233587
quelle

Antworten:

9

Die Aktivität ist das, was Sie als Fenster bezeichnen würden.

Technisch gesehen erstellt die Aktivität das Fenster für Sie.

Sie können viele davon haben, aber normalerweise nicht synchron. Um zusätzliche Informationen anzufordern, können Sie einen Dialog aufrufen oder eine Absicht für eine andere Aktivität auslösen.

Weitere Informationen finden Sie unter diesem Link .

Knossos
quelle
2
Es gibt activity.getWindow (), daher ist das Fenster Teil von Activity.
Zon
172

[UPDATE] (Lassen Sie mich mitteilen, was ich Windownach der ursprünglichen Antwort gelernt habe )

In einem Satz ist A ein rechteckiger Bereich mit einer Ansichtshierarchie . Farbige Rechtecke im Bild unten sind Fenster.Window

Geben Sie hier die Bildbeschreibung ein

Wie Sie sehen, können auf einem Bildschirm mehrere Fenster vorhanden sein, die von WindowManager verwaltet werden. Die Fensterliste im aktuellen Bildschirm kann über den Hierarchy Viewer oder abgerufen werden adb shell dumpsys window.

Fensterliste im Beispiel des Hierarchy Viewer: Geben Sie hier die Bildbeschreibung ein

(Unten ist die ursprüngliche Antwort)


Ich hatte die gleiche Frage und ich hoffe, das könnte euch helfen.

Laut Android Developer Dokumentation ,

"Jede Aktivität erhält ein Fenster, in dem sie ihre Benutzeroberfläche zeichnen kann."

und Dianne Hackborn , der ein Android Framework - Ingenieur ist, gab einige Definitionen hier . Sie sagte,

Ein Fenster ist im Grunde so, als würden Sie an ein Fenster auf dem Desktop denken. Es hat eine einzelne Oberfläche, in der der Inhalt des Fensters gerendert wird. Eine Anwendung interagiert mit dem Fenstermanager, um Fenster zu erstellen. Der Fenstermanager erstellt für jedes Fenster eine Oberfläche und gibt sie der Anwendung zum Zeichnen. Die Anwendung kann in der Oberfläche zeichnen, was sie will. Für den Fenstermanager ist es nur ein undurchsichtiges Rechteck.

Eine Oberfläche ist ein Objekt , das Pixel enthält, die auf dem Bildschirm zusammengesetzt werden . Jedes Fenster, das Sie auf dem Bildschirm sehen (ein Dialogfeld, Ihre Vollbildaktivität, die Statusleiste), hat eine eigene Oberfläche, in die es gezeichnet wird, und Surface Flinger rendert diese in der richtigen Z-Reihenfolge zur endgültigen Anzeige. Eine Oberfläche verfügt normalerweise über mehr als einen Puffer (normalerweise zwei), um doppelt gepuffert zu rendern: Die Anwendung kann ihren nächsten UI-Status zeichnen, während der Oberflächen-Flinger den Bildschirm mit dem letzten Puffer zusammensetzt, ohne auf den Abschluss der Anwendung warten zu müssen Zeichnung.

Eine Ansicht ist ein interaktives UI-Element innerhalb eines Fensters. An ein Fenster ist eine einzelne Ansichtshierarchie angehängt, die das gesamte Verhalten des Fensters bereitstellt. Wann immer das Fenster neu gezeichnet werden muss (z. B. weil sich eine Ansicht selbst ungültig gemacht hat), erfolgt dies in der Fensteroberfläche . Die Oberfläche ist gesperrt, wodurch eine Leinwand zurückgegeben wird, auf der gezeichnet werden kann. Eine Zeichnungsdurchquerung wird entlang der Hierarchie durchgeführt, wobei die Leinwand für jede Ansicht übergeben wird, um ihren Teil der Benutzeroberfläche zu zeichnen. Sobald dies erledigt ist, wird die Oberfläche entsperrt und veröffentlicht, sodass der gerade gezeichnete Puffer in den Vordergrund verschoben wird, um dann von Surface Flinger auf dem Bildschirm zusammengesetzt zu werden.

Außerdem habe ich einige andere Informationen aus Romain Guys Präsentation gefunden (Sie können seinen Vortrag in der Android-Benutzergruppe von San Francisco von hier aus ansehen und die vollständigen Folien von hier herunterladen ).

Geben Sie hier die Bildbeschreibung ein

Also auf den Punkt gebracht:

  • An Activityhat ein Fenster (in dem es seine Benutzeroberfläche zeichnet),
  • a Windowhat eine einzelne Surfaceund eine einzelne Ansichtshierarchie,
  • Ein SurfaceInclude, ViewGroupdas Ansichten enthält.
김준호
quelle
1
Danke für die geniale Antwort und die Links. Kann mir bitte jemand sagen, wo das decorView in diese Erklärung passt?
Abhiank
Können Sie mir sagen, warum view.getLocationInWindow () die y-Koordinate so zurückgibt, dass sie auch die Höhe der Statusleiste enthält? Die Statusleiste soll sich in einem anderen Fenster befinden. Außerdem habe ich überprüft, ob das Fenster, über das ich spreche, ein Aktivitätsfenster ist.
Rohan Bhatia
2
Abhängig vom Thema Ihrer Aktivität, den System-UI-Flags usw. befindet es sich möglicherweise unterhalb der Statusleiste (damit die Höhe der Statusleiste nicht im Fenster angezeigt wird) oder hinter der Statusleiste (damit Ihre Aktivität zeichnen kann hinter einer transparenten Statusleiste. In diesem Fall wird die Höhe der Statusleiste im Fenster angezeigt. Insbesondere wenn Sie eine benutzerdefinierte Statusleistenfarbe verwenden, zeichnen Sie hinter der Statusleiste.
j__m
20

Ich möchte kurz sagen:

Application --->
  Activity --->
    Window Manager --->
      Window --->
        Surface ---> 
          Canvas --->
            View Root ---> 
              View Group --->
                View ---> 
                  Bitmap/Open GL panel ---> 
                    Current Surface Buffer ---> 
                      Surface Flinger --->
                        Screen
Mohammed Youser Sawwas
quelle
1
Vielen Dank, liebe Finwe, für diese bessere Formatierung. Zum Glück bin ich völlig neu im Stackoverflow.
Mohammed Youser Sawwas
15

Android: Fenster, Oberfläche, Leinwand und Bitmap Hier ist eine sehr einfache und einfache konzeptionelle Übersicht darüber, wie die Interaktion zwischen Fenster, Oberfläche, Leinwand und Bitmap abläuft.

Sabeeh
quelle
Die oberen und unteren Flächen im Diagramm mit der Status- und Navigationsleiste korrespondieren?
Carlos Hernández Gil
Jedes Fenster auf dem Bildschirm hat eine Oberfläche. Auf dem Bildschirm können mehrere Fenster angezeigt werden. Ja, Navigations- und Statusleisten haben zugehörige Fenster und angehängte Oberflächen. Das obige Bild ist nur ein Beispiel für das Konzept.
Sabeeh