了解AMS,WMS和Android视图的关系

时间:2021-08-08 16:09:34

AMS:Activity Manager Service

(1)统一调度各应用程序的Activity
(2)内存管理
(3)进程管理

WMS:Window Manager Service

(1)计算与管理窗口的位置、层次(控制窗口的显示与隐藏的以及要显示的位置)

(2)根据(1)来渲染窗口动画

(3)持有SurfaceControl,在Surface初始化的时候,会初始化一个Canvas(画布)

Activity与Window的关系

Activity只控制生命周期和处理事件,Window只控制视图。一个Activity包含一个Window,如果一个Activity没有Window,就相当于Service。

Window中重要成员变量

mDecor:DecorView的实例,标示Window内部的*视图

mContentRoot:是DecorView的唯一子视图,内部包含mContentParent、标题栏、状态栏,在Android源码中,有9种不同的布局来对应不同主题。

mContentParent:Activity所调用的setContentView所设置的布局文件就会加到这个视图中


那么在Activity中,如何获取这三个重要的成员变量:

getDecorView:

通过Activity的getWindow().getDecorView()来获取

getRootView:

编写如下方法来获取

private static View getRootView(Activity context)   {  
return ((ViewGroup)context.findViewById(android.R.id.content)).getChildAt(0);
}

getParentView:

直接调用Activity的getContentView()来获取