[ОБНОВЛЕНИЕ] (Позвольте мне поделиться тем, что я узнал о Window
после первоначального ответа)
В одном предложении A Window
- это прямоугольная область с одной иерархией видов , Цветные прямоугольники на изображении ниже - это окна.
Как видите, на одном экране может быть несколько окон, и WindowManager управляет ими. Список окон на текущем экране можно получить с помощью Hierarchy Viewer или adb shell dumpsys window
.
Список окон в примере просмотра иерархии:
(ниже оригинальный ответ)
У меня был тот же вопрос, и я надеюсь, что это поможет вам, ребята.
Согласно Документация для разработчиков Android ,
«Каждому виду деятельности предоставляется окно для рисования его пользовательского интерфейса.»
и, Дайан Хэкборн , инженер по фреймворку Android, дала несколько определений здесь . Она сказала,
Окно в основном похоже на окно на рабочем столе. Он имеет одну поверхность , в которой отображается содержимое окна. Приложение взаимодействует с диспетчером окон для создания окон; Диспетчер окон создает поверхность для каждого окна и передает ее приложению для рисования. Приложение может рисовать все что угодно в Surface; для оконного менеджера это просто непрозрачный прямоугольник.
Поверхность - это объект , содержащий пиксели, которые скомпонованы на экране . Каждое окно, которое вы видите на экране (диалоговое окно, ваша полноэкранная активность, строка состояния), имеет свою собственную поверхность, к которой оно обращается, и Surface Flinger отображает их на конечном экране в правильном Z-порядке. Поверхность, как правило, имеет более одного буфера (обычно два) для рендеринга с двойной буферизацией: приложение может рисовать свое следующее состояние пользовательского интерфейса, в то время как бегунок поверхности создает экран, используя последний буфер, без необходимости ждать завершения приложения. рисунок.
Вид - это интерактивный элемент пользовательского интерфейса внутри окна. К окну прикреплена отдельная иерархия представления, , которая обеспечивает все поведение окна. Всякий раз, когда необходимо перерисовать окно (например, из-за того, что представление само себя аннулировало), это делается в Поверхность окна . Поверхность заблокирована, что возвращает холст, который можно использовать для рисования в нем. Обход рисования выполняется по иерархии, передавая холст для каждого представления, чтобы нарисовать свою часть пользовательского интерфейса. После этого Поверхность разблокируется и размещается так, что только что нарисованный буфер переключается на передний план, чтобы затем можно было скомпоновать его на экране с помощью Surface Flinger.
Кроме того, я нашел другую информацию из презентации Romain Guy (Вы можете посмотреть его выступление в группе пользователей Android в Сан-Франциско из здесь и загрузить полные слайды из здесь )
Итак, в двух словах:
- У
Activity
есть окно (в котором он рисует свой пользовательский интерфейс),
- a
Window
имеет одну Surface
и одну иерархию представлений,
- a
Surface
включает ViewGroup
, который содержит представления.