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函数开始分析。