Android framework:Activity

1.Activity和window/View之间关系

直接从类组成来触发:Activity类中有成员变量

mWindow :它用来描述一个应用程序窗口,其实是phonewindow。Window类有一个类型为Context的成员变量mContext,这个成员变量指向的是一个Activity对象,所以window中可以通过mContext访问activity的资源。Window类还有一个类型为Window.Callback的成员变量mCallback。这个成员变量和成员变量mContext一样,都是指向同一个Activity对象,因为Activity类是实现了Window.Callback接口的,比如事件分发中,就是通过callback实现activity响应事件

mWindowManager :成员变量mWindowManager指向的也是一个LocalWindowManager对象,Window类还有一个类型为WindowManager的成员变量mWindowManager。这个成员变量指向的是一个LocalWindowManager对象。启动Activity组件的过程中,会通过Window类的成员函数setWindowManager来将保存在它的成员变量mWindowManager中的一个LocalWindowManager对象也保存在对应的Window对象的成员变量mWindowManager。这样,Activity组件以及它所对应的Window对象就可以使用同一个LocalWindowManager对象来管理它们所描述的UI了。其实对应surface,应用和wms都有surface,通过同一surfacelayer对应surfaceflinger的surface

mDecor:指的是DecorView,有draw函数,可以重写定制ui

ViewRootImpl: ActivityThread.handleResumeActivity -> WindowManagerImpl.addView创建出ViewRootImpl。viewrootimpl类似于中介,它有binder,负责与系统交互。viewroot有mDecor成员变量。

 ViewRoot:是GUI管理系统与GUI呈现系统之间的桥梁它的主要作用如下:

A. 向DecorView分发收到的用户发起的event事件,如按键,触屏,轨迹球等事件;

B. 与WindowManagerService交互,完成整个Activity的GUI的绘制。

 

畅想 一下:activity onCreate时,其实是activity的setContentView,调用phoneWindow的addView,创建DecorView,在真正Resume activity的时候,调用makeVisible,然后调用WindowManagerGlobal的addView,addView会创建RootView,setWindowmanager等等,然后addToDisplay,调用addWindow,添加显示到activity
 

你可能感兴趣的:(android源码)