Window 负责收集和发送输入吗?
不。ViewRoot 对此负责。
视图和窗口之间有什么关系?与
DFB中曲面和窗口之间的关系?
?
Activity 和窗口之间有什么关系?每个活动都会有一个窗口吗?
是的,大多数时候。然而,SurfaceView 有自己的窗口。因此,如果一个 Activity 有一个 SurfaceView,那么它就会有多个 Window。
是否可以从应用程序创建窗口?什么时候有必要?
不必要。
安卓支持多窗口吗?
当然。使用HierachyView你可以清楚地看到系统中存在多个Window。
1.各个类的职责是什么,比如Window
, View
, Canvas
, Surface
,以及他们如何相互协作?
2.一个Activity通常有多少个窗口?
通常是一个。
3.一个Activity中的所有视图都会附加到一个窗口吗?附加是什么意思?
4.每个窗户都有表面吗?每块画布都有表面吗?
每个窗口都有一个表面和Surface
uses Canvas
在表面上绘制。
5.View负责管理焦点/按键事件,而Canvas只负责“绘图”操作?
YES.
6.WindowManager
负责Window的堆叠?这与什么有关系SurfaceFlinger
?
不确定窗口管理器的责任。 (去做)
SurfaceFlinger
用于组合与不同Window/Activity关联的Surface。
7.View不拥有Surface,视图包含的Window拥有吗?
视图将使用 Canvas 在表面上绘制。视图所附加到的窗口拥有该表面。
这可以通过实现自定义视图来理解,当您应该覆盖onDraw(Canvas)
派生类中的方法。
8.View使用调用surface.lockCanvas()获得的canvas来绘制自己?
YES.
9. 何时以及如何onDraw(Canvas)
调用,谁传递画布参数?
onDraw()
将被称为RootView
以及当调用 invalidate 时。 canvas 参数是从 RootView 传递的。
10.Canvas有尺寸吗?窗口表面总是全屏吗?
我不能肯定地说。但是当我创建自定义视图时,从 onDraw(Canvas) 获取的画布大小是全屏的。
然而,根据我的理解,出于性能考虑,窗口的Surface不应该总是全屏。但这一假设尚未得到验证。例如,statusBar 窗口不应该是全屏的。
1.每Activity
有一个ViewRoot
因此一个Window
?
YES.
2.是否需要显式创建一个窗口?窗口的表面会始终全屏吗?
本身不需要显式创建窗口。
3.状态栏会在另一个窗口吗?
YES.
4. 表面尺寸是多少?会一直全屏吗?