首次加载onMeasure,onLayout,onDraw的流程
- Activity的attach()创建了phoneWindow
- 在Activity.setContentView调用的是phoneWindow.setContentView和创建了decorView;
- 当activity执行onResume时,调用handleResumeActivity把decorView添加到window里了;这里使用WindowManagerGlobal的addView来处理添加流程;
- WindowManagerGlobal的addView创建了ViewRootImpl,并且调用它的setView方法;
- ViewRootImpl的setView方法里调用了requestLayout,并且调用windowmanagerService把布局参数添加进去了;
- ViewRootImpl的requestLayout调用scheduleTraversals方法,接着performTraversals,measure-layout-draw,分别调用onMeasure,onLayout,onDraw
MeasureSpec基本概念
它是32个二进制数组成的, 前2个数表示测量模式,后30个数表示尺寸;
三种模式: MeasureSpec.EXACTLY 对应布局中是March_parent
MeasureSpec.AT_MOST 对应布局中是warp_content
MeasureSpec.UNSPECIFIED 系统使用,忽略它的存在