Android的控件架构
Android中控件大致分为ViewGroup控件和View控件。在Activity中使用的findViewbyId()方法,就是在控件树中以
深度优先遍历查找对应元素。
android UI架构图
每个Activvity都包含一个Window对象,该对象通常由PhoneWindow实现,
该Window在Activity的attach方法中通过调用
PolicyManager.makeNewWindo创建; PhoneWindow将一个DecorView设置为整个应用窗口的根View。DecorView作为窗口界面的顶层视图,封装了一些窗口操作的通用方法。DecorView将要显示的具体内容呈现在了PhoneWindow,这里面的所有View的监听事件都通过WSM(WindowManagerService)来进行接受,通过Activity对象来回调相应的Listener。显示上,DecorView装载了一个竖的LinearLayout,将屏幕分为两部分TitleView和ContentView。ContentView是一个ID为content的FrameLayout,在Activity中调用的setContentView就是给ContentView设置内容的。
注意:当程序在onCreate()方法中setContentView()方法后,AMS(ActivityManagerService)会回调onResume()方法,此时系统会将整个DecorView添加到PhoneWindow中,以完成界面绘制。
ViewRoot是连接DecorView和WMS的纽带,对应于ViewRootImpl类,View的三大流程均是通过ViewRoot完成。