美文网首页
Android View的绘制流程(上)

Android View的绘制流程(上)

作者: QRephen | 来源:发表于2018-03-20 17:46 被阅读0次
View的绘制流程

我们在Activity里面使用Activity#setContentView方法来进行界面的绘制,每一个Activity都有一个Window对象。一般Window对象是PhoneWindow。在ActivityThread调用performLaunchActivity方法,然后调用activity.attach方法对Window对象进行初始化。

ActivityThread.java#attach Activity.java# setContentView

在PhoneWindow里的setContentView方法,会调用installDecor方法对DecorView对象进行初始化,DecorView(FramLayout)是整个应用窗口的根view,这里面封装了一些对窗口操作的通用方法。

PhoneWindow.java# installDecor

通过generateDecor方法初始化DecorView对象,然后通过mDecor.setWindow(this)把DecorView绑定在PhoneWindow上面。接下来mContentParent = generateLayout(mDecor)来获取ContentView。其中ID_ANDROID_CONTENT(com.android.internal.R.id.content),使用这个id来获取即可。该id是定义在Android系统提供的xml布局里面的。

PhoneWindow.java#generateLayout

获取mContentParent后,通过mLayoutInflater.inflate(layoutResID, mContentParent);把传入的布局文件填充到ContentView上。最后把该ContentView定义的xml和DecorView对象进行绑定,整个View的绘制流程就通了。

PhoneWindow.java#setContentView

在onResourcesLoaded中调用addView,将xml和DecorView对象进行绑定。根据设置theme,这里的layoutResource有很多种,例如screen_simple。

screen_simple.xml PhoneWindow.java#generateLayout

界面的绘制是在ActivityManagerService回调onResume方法,这个时候界面才会显示出来。最终调用ActivityThread的handleResumeActivity方法。wm.addView(decor, l)调用到WindowManagerImpl的addView方法。

ActivityThread.java#handleResumeActivity

WindowManagerImpl的addView调用到WindowManagerGlobal的addView。

WindowManagerGlobal.java# addView DecorView添加到窗口

相关文章

网友评论

      本文标题:Android View的绘制流程(上)

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