Подтвердить что ты не робот

Архитектура графического интерфейса Android - отношение между поверхностью/представлением/окном/холстом

=========================

ОБНОВЛЕНИЕ: после нескольких дней поиска в googling и , я нашел ответы на большинство этих немых вопросов. См. Ответы, которые я представил.

=========

В чем ответственность Android Window?

Вот несколько вопросов:

  • Отвечает ли он за сбор и отправку ввода?
  • Какова связь между представлением и окном? То же, что связь между поверхностью и окном в DFB?
  • Какова связь между активностью и окном? Будет ли у каждой операции окно?
  • Можно ли создать окно из приложения? А когда это необходимо?
  • Поддерживает ли Android многооконный режим?

EDIT: добавьте еще вопросы:

  • Каковы обязанности различных классов, таких как Window, View, Canvas, Surface и как они взаимодействуют друг с другом?

  • Сколько окон обычно имеет активность?

3.Вы увидите, что все окна в одном мероприятии будут прикреплены к окну? Что означает соединение?

  • Каждое окно имеет поверхность? У каждого холста есть поверхность?

  • View отвечает за focus/keyEvent/manager, а Cavus несет ответственность только за операцию рисования.

  • WindowManager отвечает за стекирование окон? Как это связано с SurfaceFlinger?

  • В представлении отсутствует собственная поверхность, окно, в котором содержится вид, принадлежит?

  • Просмотр рисует сам, используя холст, полученный вызовом surface.lockCanvas().

  • Когда будет вызываться onDraw (Canvas)? Как и кто передает параметры холста?

  • Есть ли размер холста? Будет ли поверхность окна всегда иметь полный экран?

ИЗМЕНИТЬ еще раз:

После просмотра этого прекрасного подарка, предоставленного Роменом Гаем http://www.youtube.com/watch?v=duefsFTJXzc&feature=feedwll&list=WL, несколько вопросов разрешены и добавлены еще несколько:)

  • Будет ли у каждого Activity один ViewRoot и, следовательно, одно окно?
  • Есть ли необходимость в создании окна явно? и Будет ли поверхность окна всегда иметь полный экран?
  • Будет ли строка состояния находиться в другом окне?
  • Каков размер поверхности? Будет ли это всегда полноэкранным?
4b9b3361

Ответ 1

Является ли окно ответственным за сбор и отправку ввода?

Нет. За это отвечает ViewRoot.

Какова связь между представлением и окном? То же, что и связь между поверхностью и окном в DFB?

?

Какова связь между активностью и окном? Будет ли каждое действие иметь окно?

Да, большую часть времени. Однако SurfaceView имеет собственное окно. Итак, если у Activity есть SurfaceView, у него будет более одного окна.

Можно ли создать окно из приложения? А когда это необходимо?

Не нужно.

Поддерживает ли Android многооконный режим?

Конечно. Используя HierachyView, вы можете ясно видеть, что в системе существует более одного окна.

1. Каковы обязанности различных классов, такие как Window, View, Canvas, Surface и как они взаимодействуют друг с другом? 2.Как много окон обычно имеет активность?

Обычно один.

3.Вы увидите, что все виды в одном действии будут прикреплены к окну? Что означает "подкрепление"? 4. У каждого окна есть поверхность? У каждого холста есть поверхность?

Каждое окно имеет поверхность, а Surface использует Canvas для рисования на поверхности.

5.View отвечает за управление событиями фокуса/ключа, в то время как Canvas несет ответственность только за операцию "рисования"?

ДА.

6. WindowManager отвечает за стекирование окон? Как это относится к SurfaceFlinger?

Не уверены в ответственности WindowManager. (TODO)

SurfaceFlinger используется для компоновки поверхности, связанной с другим окном/активностью.

7.View не владеет Поверхностью, Окно, в котором содержится вид?

Вид будет рисовать на поверхности с помощью Canvas. Окно, к которому прикреплен вид, принадлежит поверхности.

Это можно понять, реализовав представление настройки, когда вы должны переопределить метод onDraw(Canvas) в производном классе.

8. The View рисует себя, используя холст, полученный вызовом surface.lockCanvas()?

ДА.

9.Когда и как называется onDraw(Canvas), и кто передает параметры холста?

onDraw() будет вызываться RootView и когда вызывается invalidate. Параметр canvas передается из RootView.

10. У холста есть размер? Будет ли поверхность окна всегда в полноэкранном режиме?

Я не могу сказать точно. Но когда я создаю настраиваемое представление, размер холста, полученного из onDraw (Canvas), отображается в полноэкранном режиме.

Однако, в моем понимании, для производительности, поверхность для окна не всегда должна быть полноэкранной. Но это предположение не было проверено. Например, окно statusBar не должно быть полноэкранным.

1. Будем каждый Activity иметь один ViewRoot и, следовательно, один Window?

ДА.

2.Есть ли необходимость в создании окна явно? Будет ли поверхность окна всегда иметь полный экран?

Не нужно явно создавать окно.

3. Будет ли строка состояния находиться в другом окне?

ДА.

4. Каков размер поверхности? Будет ли это всегда полноэкранным?

Ответ 2

Оцените, что вы задали все эти вопросы. 1) AFAIK каждый вид деятельности имеет один вид ViewRoot, и каждый ViewRoot имеет по крайней мере одно окно 2) Нет необходимости явно создавать окно, и я думаю, что это всегда должно быть полное окно.. хотя и не уверен в этом 3) Да, это может быть, мы можем поместить строку состояния в другие окна 4) Не может быть частью окна, не всегда охватывает весь экран.

Пожалуйста, исправьте мое понимание, если я заявляю что-то не так.

Ответ 3

Android: концепция Window, Surface, Canvas и Bitmap

Вот очень простой и простой концептуальный обзор того, как взаимодействие происходит между окном, поверхностью, холстом и растровым изображением.
Посмотрите этот ответ hackbod, отличное объяснение.

Ответ 4

на вопрос

Какова связь между деятельностью и окном? Будет ли в каждом действии окно?

не согласен с @pierrotlefou, потому что в Google doc SurfaceView предоставляет выделенную поверхность, а не Window.

Поверхность Z упорядочена так, что она находится за окном, удерживая ее SurfaceView; SurfaceView пробивает отверстие в своем окне, чтобы его поверхность отображалась.