美文网首页高级UI
UI绘制流程及原理

UI绘制流程及原理

作者: android源码探索 | 来源:发表于2022-07-03 00:16 被阅读0次

    带着如下几个问题去听课

    1. ActivityThread起到的是什么作用?
    2. Activty的生命周期oncreate 和onResume 在ui绘制流程中做了哪些事情?
    3. View是如何添加到window上面?
    4. 为什么View的更新不能在子线程?

    ActivityThread起到的是什么作用

    ActivtityThread是activity里面的各个生命周期方法的执行入口。里面都是通过Handler去实现的。

    Activty的生命周期oncreate 和onResume 在ui绘制流程中做了哪些事情?

    onCreate只是把View添加到window上面,并没有开始测量,布局。测量和布局是在onresume执行的。
    具体的源码可以从ActivityThread的performLaunchActivity。 这里面会通过调用WindowManager.addView(decorView, params),然后通过windowManager可以一层层的追溯到ViewRootImpl。 viewRootImpl通过调用setView方法后会执行到requestlayout方法。 requestLayout方法在往后就通过编舞者,来调用performMeasure, performLayout, perormDraw,从而达到测量,布局,绘制的目的。

    View是如何添加到window上面

    Activity.setContentView ------> Window.setContentView(window是一个抽你类,只有唯一的一个实例PhoneWindow)

    最后就调用到了PhoneWindow.setContentView

    installDecorView(创建顶层view为FrameLayout子类DecorView) ------> 根据不同的主题加载相应的布局添加到顶层View上面 ------> 由于每个布局上面必定有id为android.R.id.content控件,因此setContentView的布局最后是添加到了android.R.id.content的Frame上面的。

    为什么View的更新不能在子线程?

    那是因为在ViewRootImpl调用 setView方法后, 里面有一个checkThread方法, 判断了当前线程是否为主线程。 如果不是主线程,则抛出异常。因为ui更新必须在主线程里面才能完成。

    相关文章

      网友评论

        本文标题:UI绘制流程及原理

        本文链接:https://www.haomeiwen.com/subject/yeklbrtx.html