Что такое окно Android?

Что такое Window в Android?

Я думал, что самый высокий уровень в Android называется Activity, который является экраном, который вы видите.

Может ли кто-нибудь сказать мне, что такое Window на Android? мы просто имеем один или несколько из них.

Ответ 1

Активность - это то, что вы бы назвали окном.

С технической точки зрения, Activity создает для вас окно.

У вас может быть много из них, но обычно не синхронно. Чтобы запросить дополнительную информацию, вы можете вызвать диалог или запустить Intent для другого действия.

Для получения дополнительной информации посетите эту ссылку.

Ответ 2

[ОБНОВЛЕНИЕ] (позвольте мне поделиться тем, что я узнал о Window после оригинального ответа)

В одном предложении A Window представляет собой прямоугольную область, которая имеет одну иерархию представлений. Цветные прямоугольники внизу изображения - это окна.

enter image description here

Как вы можете видеть, на одном экране может быть несколько окон, а WindowManager управляет ими. Список окон на текущем экране можно получить с помощью Hierarchy Viewer или adb shell dumpsys window.

Список окон в примере просмотра иерархии: enter image description here

(Ниже приведен оригинальный ответ)


У меня был тот же вопрос, и я надеюсь, что это может помочь вам, ребята.

Согласно Документация разработчика Android,

"Каждому действию предоставляется окно, в котором можно нарисовать свой пользовательский интерфейс.

и Дайанн Хакборн, который является инженером фреймворка Android, дал некоторые определения здесь. Она сказала:

Окно в основном похоже на окно на рабочем столе. Он имеет одну Surface, в которой отображается содержимое окна. Приложение взаимодействует с Window Manager для создания окон; Window Manager создает поверхность для каждого окна и передает ее в приложение для рисования. Приложение может рисовать все, что захочет в Surface; для Window Manager это просто непрозрачный прямоугольник.

Поверхность - это объект , содержащий пиксели, которые компонуются на экране. Каждое окно, которое вы видите на экране (диалог, полноэкранная активность, строка состояния), имеет свою собственную поверхность, к которой он обращается, и Surface Flinger отображает их на конечном дисплее в их правильном Z-порядке. Поверхность обычно имеет более одного буфера (обычно два) для выполнения двойной буферизации рендеринга: приложение может рисовать свое следующее состояние пользовательского интерфейса, в то время как поверхностный flinger компонует экран с использованием последнего буфера, не дожидаясь завершения приложения рисунок.

A - это интерактивный элемент пользовательского интерфейса внутри окна. В окне есть отдельная иерархия представлений,, которая обеспечивает все поведение окна. Всякий раз, когда окно нужно перерисовать (например, поскольку представление само по себе недействительно), это делается в окне Surface. Поверхность заблокирована, которая возвращает холст, который можно использовать для рисования. Обход ничьей осуществляется по иерархии, передавая холст вниз для каждого представления, чтобы нарисовать его часть пользовательского интерфейса. После этого поверхность будет разблокирована и отправлена ​​так, чтобы только что нарисованный буфер был заменен на передний план, а затем был скомпонован на экран с помощью поверхностного Flinger.

Кроме того, я нашел другую информацию из презентация Romain Guy (вы можете посмотреть его разговор в группе пользователей Android в Сан-Франциско от здесь и загрузите полные слайды из здесь)

enter image description here

Итак, в двух словах:

  • В Activity есть окно (в котором он рисует свой пользовательский интерфейс),
  • a Window имеет единственную Surface и одну иерархию представления, прикрепленную к ней,
  • a Surface включает ViewGroup, который содержит представления.

Ответ 3

Android: окно, поверхность, холст и растровое изображение Вот простой и простой концептуальный обзор того, как взаимодействие происходит между окном, поверхностью, холстом и растровым изображением.

Ответ 4

Я хотел бы кратко сказать:

Application --->
  Activity --->
    Window Manager --->
      Window --->
        Surface ---> 
          Canvas --->
            View Root ---> 
              View Group --->
                View ---> 
                  Bitmap/Open GL panel ---> 
                    Current Surface Buffer ---> 
                      Surface Flinger --->
                        Screen