web-dev-qa-db-fra.com

Android SurfaceFlinger

Je voudrais juste demander si SurfaceFlinger est toujours appelé pour tout type de dessin à l'écran? Exemple, affichage d'un fichier JPG à l'écran.

31
artsylar

SurfaceFlinger est pas ce qui dessine votre fenêtre. Il alloue un tampon de cadre pour votre fenêtre, que le framework en cours d'exécution dans votre application dessine directement sans interagir avec SurfaceFlinger. La seule interaction avec SurfaceFlinger lorsque vous dessinez votre fenêtre est de composer le nouveau tampon de cadre final à l'écran une fois que vous avez fini de dessiner un cadre.

34
hackbod

Oui, SurfaceFlinger est le compositeur d'Android, il prend donc tout ce qui sera affiché, détermine à quoi ressemblera le cadre résultant, puis l'envoie pour être affiché à l'écran via l'interface EGL de la carte graphique.

Vous pouvez avoir l'idée qu'il contrôle le résultat de tout ce que vous voyez dans un message par Android développeur Jeff Sharkey où il teinte tout l'écran pour le mode nuit . J'ai également trouvé une présentation beamer qui a l'air bien ce sujet .

17
Frank

http://pierrchen.blogspot.jp/2014/02/what-is-surfaceflinger-in-Android.html

SurfaceFlinger est un service système Android Android, responsable de la composition de toutes les surfaces d'application et de système dans un seul tampon qui sera finalement affiché par le contrôleur d'affichage.

Zoomons sur la déclaration ci-dessus.

SurfaceFlinger est un service à l'échelle du système, mais il n'est pas directement disponible pour le développeur d'applications comme Sensor ou d'autres services peuvent l'être. Chaque fois que vous souhaitez mettre à jour votre interface utilisateur, SurfaceFlinger intervient. Cela explique pourquoi SurfaceFlinger est un draineur de batterie.

Outre les surfaces de votre application, il existe des surfaces système, notamment la barre d'état, la barre de navigation et, lors de la rotation, des surfaces créées par le système pour l'animation de rotation. La plupart des applications n'ont qu'une seule surface active - celle de l'activité de premier plan actuelle, d'autres en ont plus d'une lorsque SurfaceView est utilisé dans la hiérarchie des vues ou lorsque le mode Présentation est utilisé.

SurfaceFlinger est responsable de la COMPOSITION de toutes ces surfaces. Un malentendu courant est que SurfaceFinger est destiné au DESSIN. Ce n'est pas correct. Le dessin est le travail d'OpenGL. La chose intéressante est que SurfaceFlinger a également utilisé openGL pour la composition.

Le résultat de la composition sera placé dans un tampon système, ou fenêtre native, qui est la source du contrôleur d'affichage pour récupérer les données. C'est ce que vous voyez à l'écran.

15
pierrotlefou