Android View绘图机制

之前分析了Activity的启动流程,这里趁热打铁继续给出View的绘图机制.

上篇讲到了ActivityThread#handleLaunchActivity---->ActivityThread#performLaunchActivity方法是Acitivty的启动,接下来ActivityThread#handleResumeActivity是显示View相关.因为setContentView()是在onCreate方法执行,因此会比OnResume早,所以我们知道setContentView的作用是准备系统View相关,下面给出setContentView生成decorView流程


以上是setContentView部分流程,主要作用是为Activity的view显示做一些系统性准备,包括,feature等预置项,在接着ActivityThread#handleResumeActivity继续分析。下图为启动流程中View加载的过程

终于可以看到在最后的performTraversals()方法了。

继续方法末尾看这个方法可以看到performMeasure(),performLayout(),performDraw()这三个方法.至此这个流程已经梳理清楚.

performMeasure()方法可以到View.measure方法中,performLayout()方法会调到View.layout,performDraw()方法会调到ViewRootImpl.Draw()---->ViewRootImpl.drawSoftware()----->View.draw(canvas)

至此整个流程分析完毕,剩余View中 measure,layout,draw方法自行分析.

总结:这里流程主要涉及windowmanager通过windowmangerGlobal类对view的管理,在onResume显示之前,需要将系统的东西通过setContentView加载,所以app开发需要将feature预先在setContentView之前加载.看下图在PhoneWindow generateLayout中


遇到的问题:1.另外在看到这段代码的时候,想起来之前遇到个bug,setTheme为什么要在super.onCreate()之前调用。不知道是不是这引起的?


阅读更多
个人分类: Android系统分析
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭