8.3 初识Surface
本节将介绍Surface对象。它可是纵跨Java/JNI层的对象,想必读者已经摩拳擦掌,跃跃欲试了。
8.3.1 和Surface有关的流程总结
这里先总结一下前面讲解中和Surface有关的流程:
在ViewRoot构造时,会创建一个Surface,它使用无参构造函数,代码如下所示:
private final Surface mSurface=new Surface();
ViewRoot通过IWindowSession和WMS交互,而WMS中调用的一个attach函数会构造一个SurfaceSession,代码如下所示:
void windowAddedLocked(){
if(mSurfaceSession==null){
mSurfaceSession=new SurfaceSession();
mNumWindow++;
}
}
ViewRoot在performTransval的处理过程中会调用IWindowSession的relayout函数。这个函数目前还没有分析。
ViewRoot调用Surface的lockCanvas,得到一块画布。
ViewRoot调用Surface的unlockCanvasAndPost释放这块画布。
下面从relayout函数开始分析。