Android SurfaceFlinger - PullRequest
       39

Android SurfaceFlinger

31 голосов
/ 18 апреля 2011

Я просто хотел бы спросить, всегда ли SurfaceFlinger вызывается для любого типа рисования на экране? Пример отображения файла JPG на экране.

Ответы [ 3 ]

34 голосов
/ 18 апреля 2011

SurfaceFlinger - это , а не , что рисует ваше окно. Он выделяет буфер кадра для вашего окна, к которому фреймворк, работающий в вашем приложении, рисует напрямую, не взаимодействуя с SurfaceFlinger. Единственное взаимодействие, с которым SurfaceFlinger взаимодействует, когда вы рисуете свое окно, - это создание окончательного буфера нового кадра на экране, как только вы закончите рисование кадра.

17 голосов
/ 18 апреля 2011

Да, SurfaceFlinger - это композитор Android, поэтому он берет все, что будет отображаться, вычисляет, как будет выглядеть результирующий кадр, и затем отправляет его для отображения на экране через интерфейс EGL графической карты.

Вы можете понять, что он контролирует результат всего, что вы видите в посте разработчика Android Джеффа Шарки, где он подкрашивает весь экран для ночного режима . Я также нашел презентацию проектора, которая хорошо смотрится по этой теме .

15 голосов
/ 09 февраля 2014

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

SurfaceFlinger - системный сервис Android, отвечающий за объединение всех поверхностей приложения и системы в единый буфер, который наконец должен отображаться контроллером дисплея.

Давайте увеличим приведенное выше утверждение.

SurfaceFlinger - это общесистемный сервис, но не напрямую доступны для разработчика приложений, как датчик или другие службы могут быть. Каждый раз, когда вы хотите обновить свой интерфейс, SurfaceFlinger будет пнуть в. Это объясняет, почему SurfaceFlinger является аккумуляторной батареи.

Помимо ваших областей применения, есть системные поверхности, включая строку состояния, панель навигации и, когда происходит поворот, поверхности, созданные системой для анимации вращения. Наиболее приложения имеют только одну активную поверхность - ту из текущих активность переднего плана, другие имеют более одного, когда SurfaceView используется в иерархии представления или в режиме презентации.

SurfaceFlinger отвечает за составление всех этих поверхностей. Распространенным заблуждением является то, что SurfaceFinger предназначен для НАНЕСЕНИЯ. это неправильно. Рисование - это работа OpenGL. Интересная вещь SurfaceFlinger также использовал openGL для композитинга.

Результат композиции будет помещен в системный буфер или в нативный окно, которое является источником для контроллера дисплея для извлечения данных. Это то, что вы видите на экране.

...