1,WMS和AMS
WMS和AMS都是SystemServer进程中的一个服务,我们app启动之后会把自己的binder共享给AMS,通过AMS去管理,app启动后会运行ActivityThread.main,在main函数中会有一个上报机制,创建一个activityThread,在通过activityThread.attach(false, startSeq),通过拿到AMS的本地代理IActivityManager mgr = ActivityManager.getService(),在去调用mgr.attachApplication(mAppThread, startSeq)把app自己的binder对象给到AMS去管理,WMS同理也是这样,activity的生命周期是来管理Window的,Window是用来管理所有的View的,正是因为这样所以在activity一启动的时候,就会创建一个PhoneWindow并且创建一个WindowManager用来管理PhoneWindow,在activity的onCreate中的setContentView中创建一个decorView,但是这个时候并没有和activity绑定,只有在onResume的时候,decorView才和activity建立起联系
2,WMS是简介
WMS是一个管理整个手机系统窗口的服务。
WMS的创建在startOtherService方法中wm = WindowManagerService.main(context,inputManager,|firstBoot,mOnlyCore,new phoneWindowManager(),mActivityManagerService,mActivityTaskManager);
mActivityManagerService.setWindowManager(wm)
mAtmInternal.resumeTopActivityies(false) 启动应用的lunch页面
DecorView是phoneWindow中预设好的一个布局,是一个FrameLayout
WMS窗口管理:负责窗口的启动,添加,删除,管理窗口的大小,层级,核心成员WindowContainer、RootWindowContainer、DisplayContent、TaskStack、Task、AppWindowToken、WindowState
窗口动画:由其子系统 WindowAnimator 管理
输入系统中转站:通过对窗口的触摸从而产生触摸事件,由 InputMethodService(IMS)对触摸事件进行处理,它会寻找一个最合适的窗口处理触摸反馈信息
Surface 管理:为每个窗口分配一块 Surface,用于绘制要显示的内容
View的层级
对应于ViewRootImpl(替代ViewRoot)类,它是连接WindowManager和Decor的纽带,View的三大绘制流程均是通过ViewRoot完成,当Activity对象被创建完成后,会将DecorView添加到Window中,同时会创建ViewRootImpl对象,并将ViewRootImpl和DecorView对象建立关联
Activity的启动
View的绘制流程,
AMS----> onResume
ActivityThread --> handleResumeActivity
WMS
WindowManagerGlobal.updateViewLayout
ViewRootImpl.setLayoutParms
ViewRootImpl.requestLayout
ViewRootImpl.scheduleTraversals : UI的绘制起点,也是从这个方法开始进行刷新的
doTraversals-->performTraversals--->(performMeasure、performLayout、performDraw)---> (onMeasure、onLayout、onDraw)
SetContentView
Activity--> onResume
WindowManagerImpl
docor
addView--> WindowManagerGlobal.addView --->ViewRootImpl.setView ---> Binder进程---> WMS 底层,-----> suFaceFling
在activity的onResume中直接获取View.geiWidth()第一次获取不到值,是因为在handleresumeActivity中一开始就会运行onResume,还没有进行setView,没有进行updateViewLayout,第一次获取到的值是0,第二次是因为activity已经完成了所有的绘制动作,只是去获取绘制过的数据,获取到的值就已经是之前绘制过的值。
3,WMS视图处理视图
Android视图显示结构