Was ist ein Window
in 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?
Was ist ein Window
in 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?
Antworten:
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 .
[UPDATE] (Lassen Sie mich mitteilen, was ich Window
nach 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
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:
(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 ).
Also auf den Punkt gebracht:
Activity
hat ein Fenster (in dem es seine Benutzeroberfläche zeichnet),Window
hat eine einzelne Surface
und eine einzelne Ansichtshierarchie,Surface
Include, ViewGroup
das Ansichten enthält.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