Android SurfaceFlinger
Я просто хотел бы спросить, всегда ли SurfaceFlinger вызывается для любого типа рисования на экране? Пример отображения файла JPG на экране.
3 ответа
SurfaceFlinger - это не то, что рисует ваше окно. Он выделяет буфер кадра для вашего окна, к которому фреймворк, работающий в вашем приложении, рисует напрямую, не взаимодействуя с SurfaceFlinger. Единственное взаимодействие, с которым SurfaceFlinger взаимодействует, когда вы рисуете свое окно, - это объединение окончательного буфера нового кадра с экраном, как только вы закончите рисовать кадр.
http://pierrchen.blogspot.jp/2014/02/what-is-surfaceflinger-in-android.html
SurfaceFlinger - это системный сервис Android, отвечающий за объединение всех поверхностей приложения и системы в единый буфер, который, наконец, должен отображаться контроллером дисплея.
Давайте увеличим приведенное выше утверждение.
SurfaceFlinger - это общесистемный сервис, но он не доступен напрямую разработчику приложения, как это могут сделать Sensor или другие сервисы. Каждый раз, когда вы захотите обновить свой пользовательский интерфейс, SurfaceFlinger будет срабатывать. Это объясняет, почему SurfaceFlinger является аккумулятором батареи.
Помимо поверхностей вашего приложения, существуют системные поверхности, включая строку состояния, панель навигации и, когда происходит вращение, поверхности, созданные системой для анимации вращения. У большинства приложений есть только одна активная поверхность - одна из текущих операций на переднем плане, у других - более одной, когда SurfaceView используется в иерархии представления или в режиме презентации.
SurfaceFlinger отвечает за составление всех этих поверхностей. Распространенным заблуждением является то, что SurfaceFinger предназначен для НАНЕСЕНИЯ. Это не правильно. Рисование - это работа OpenGL. Интересно, что SurfaceFlinger также использовал openGL для композитинга.
Результат компоновки будет помещен в системный буфер или собственное окно, которое является источником для контроллера дисплея для извлечения данных. Это то, что вы видите на экране.
Да, SurfaceFlinger - это композитор Android, поэтому он берет все, что будет отображаться, вычисляет, как будет выглядеть результирующий кадр, и затем отправляет его для отображения на экране через интерфейс EGL графической карты.
Вы можете понять, что он контролирует результат всего, что вы видите в посте разработчика Android Джеффа Шарки, где он окрашивает весь экран в ночной режим. Я также нашел презентацию проектора, которая хорошо выглядит по этой теме.