- ActivityThread.handleResumeActivity()
- Activity.makeVisible()
- ViewManager.addView(DecorView) == WindowManagerImpl.addView
- WindowManagerGlobal.addView()
- ViewRootImpl构造:传入Display,来自Context.getDisplay()
- 创建Surface
- 获取IWindowSession代理:WindowManagerGlobal.getWindowSession()
- 获取IMS代理单例
- 获取WMS代理
- 获取IWindowSession:WMS.openSession()
- 创建Session并返回(WMS进程)
- 设置主线程:mThread = Thread.currentThread();
- 设置Display
- 获取Choreographer单例
- 将decorView添加至mViews,ViewRootImpl添加至mRoots,LayoutParams添加至mParams
- ViewRootImpl.setView(DecorView)
- requestLayout()
- scheduleTraversals()
- Choreographer的申请VSYNC过程
- IWindowSession.addToDisplay() == Session.addToDisplay(),这里传入InputChannel
- WMS.addWindow()
- 创建WindowState
- addWindowToListInOrderLocked(WindowState);
- InputManager.registerInputChannel(InputChannel, ..);
- WindowState.attach()
- Session.windowAddedLocked()
- 创建SurfaceSession
- 将当前Session添加到WMS.mSessions成员中
-DecorView.setVisibility(VISIBLE)
Choreographer申请VSYNC过程:
- 添加同步屏障
- Choreographer.postCallback()
- postCallbackDelayed()
- postCallbackDelayedInternal()
- 将callback类型的动作加入到mCallbackQueues中,类型有:Input、Animation、Traversal、Commit
- scheduleFrameLocked()
- scheduleVsyncLocked()
- FrameDisplayEventReceiver.scheduleVsync():安排VSYNC信号
VSYNC处理过程:
- FrameDisplayEventReceiver.dispatchVsync():由native层调用到Java层
- onVsync()
- handler切换到UI线程处理 FrameDisplayEventReceiver.run()
- doFrame()
- doCallbacks():处理不同Callback类型的事件,对应CallbackRecord中的run方法
- Traversl事件对应doTraversal()方法
- 移除同步屏障
- performTraversals();