Является ли Window ответственным за сбор и отправку ввода?
Нет. За это отвечает ViewRoot.
Какая связь между видом и окном? Такой же как
связь между поверхностью и окном в DFB?
Какая связь между действием и окном? Будет ли у каждого вида деятельности окно?
Да, большую часть времени. Однако SurfaceView имеет собственное окно. Таким образом, если у Activity есть SurfaceView, у него будет более одного окна.
Можно ли создать окно из приложения? А когда это необходимо?
Не обязательно.
Поддерживает ли Android многооконный режим?
Конечно. Используя HierachyView, вы можете четко видеть, что в системе существует более одного окна.
1. Каковы обязанности различных классов, таких как Window
, View
, Canvas
, Surface
, и как они сотрудничают друг с другом?
2. Сколько окон обычно имеют Активность?
Обычно один.
3. Будут ли все виды в одном действии прикреплены к окну? Что значит прикрепить?
4. У каждого окна есть поверхность? У каждого холста есть поверхность?
Каждое окно имеет поверхность, а Surface
использует Canvas
для рисования на поверхности.
5.View отвечает за управление событиями фокуса / клавиши, в то время как Canvas отвечает только за операцию «рисования»?
YES.
6. WindowManager
отвечает за укладку окон? Как это относится к SurfaceFlinger
?
Не уверен в ответственности WindowManager. (TODO)
SurfaceFlinger
используется для составления Поверхности, связанной с различными окнами / действиями.
7.Просмотру не принадлежит поверхность, а окну, в котором содержится вид?
Вид будет рисоваться на поверхности с помощью Canvas. Окно, к которому прикреплен вид, владеет поверхностью.
Это можно понять, реализовав настраиваемое представление, когда вы должны переопределить метод onDraw(Canvas)
в своем производном классе.
8. Вид рисует сам, используя холст, полученный вызовом surface.lockCanvas ()?
YES.
9. Когда и как вызывается onDraw(Canvas)
и кто передает параметры canvas?
onDraw()
будет вызываться RootView
и при вызове invalidate. Параметр canvas передается из RootView.
10. У Canvas есть размер? Поверхность окна всегда будет полноэкранной?
Не могу точно сказать. Но когда я создаю настраиваемое представление, размер холста, полученного из onDraw (Canvas), составляет полный экран.
Однако, в моем понимании, для повышения производительности поверхность для окна не всегда должна быть полноэкранной. Но это предположение не было проверено. Например, окно statusBar не должно быть полноэкранным.
1.Будет ли в каждом Activity
один ViewRoot
и, следовательно, один Window
?
YES.
2. Есть ли необходимость явно создавать окно? Поверхность окна всегда будет на весь экран?
Нет необходимости создавать окно как таковое.
3.Будет ли строка состояния в другом окне?
YES.
4. Каков размер поверхности? Это всегда будет полноэкранный режим?