Window、View、事件、绘制

- 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();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值