Ответ 1
Вот несколько определений:
-
A Поверхность - это объект, содержащий пиксели, которые компонуются на экране. Каждое окно, которое вы видите на экране (диалог, полноэкранная активность, строка состояния), имеет свою собственную поверхность, к которой он обращается, и Surface Flinger отображает их на конечном дисплее в их правильном Z-порядке. Поверхность обычно имеет более одного буфера (обычно два) для выполнения двойной буферизации рендеринга: приложение может рисовать свое следующее состояние пользовательского интерфейса, в то время как поверхностный flinger компонует экран с использованием последнего буфера, не дожидаясь завершения приложения рисунок.
-
Окно в основном похоже на окно на рабочем столе. Он имеет одну поверхность, в которой отображается содержимое окна. Приложение взаимодействует с Window Manager для создания окон; Window Manager создает поверхность для каждого окна и передает ее в приложение для рисования. Приложение может рисовать все, что захочет в Surface; для Window Manager это просто непрозрачный прямоугольник.
-
Вид - это интерактивный элемент пользовательского интерфейса внутри окна. Окно имеет единую иерархию представлений, которая обеспечивает все поведение окна. Всякий раз, когда окно нужно перерисовать (например, поскольку представление недействительно), это делается в окне Surface. Поверхность заблокирована, которая возвращает холст, который можно использовать для рисования. Обход ничьей осуществляется по иерархии, передавая холст вниз для каждого представления, чтобы нарисовать его часть пользовательского интерфейса. После этого поверхность будет разблокирована и размещена так, чтобы только что нарисованный буфер был заменен на передний план, а затем был скомпонован на экран с помощью поверхностного Flinger.
-
SurfaceView - это специальная реализация View, которая также создает свою собственную выделенную Surface для приложения, которое непосредственно втягивается (за пределами обычной иерархии представлений, которая в противном случае должна использовать единую Surface для окна). То, как это работает, проще, чем вы можете ожидать, - все, что SurfaceView делает, просит диспетчера окон создать новое окно, сообщая ему в Z-порядке это окно либо сразу же, либо перед окном SurfaceView, и позиционируя его в соответствии с где SurfaceView появляется в содержащем окне. Если поверхность находится за основным окном (в порядке Z), SurfaceView также заполняет свою часть основного окна прозрачностью, чтобы поверхность могла быть видна.
-
Растровое изображение - это просто интерфейс для некоторых пиксельных данных. Пиксели могут быть выделены с помощью самого Bitmap, когда вы непосредственно создаете его, или он может указывать на пиксели, которые у него отсутствуют, например, то, что внутренне происходит, чтобы зацепить холст до поверхности для рисования. (Растровое изображение создается и указывается на текущий буфер рисования поверхности.)
Кроме того, имейте в виду, что SurfaceView - это довольно тяжелый объект. Если у вас несколько SurfaceViews в определенном пользовательском интерфейсе, остановитесь и подумайте, действительно ли это необходимо. Если у вас более двух, у вас почти наверняка будет слишком много.