surface是SurfaceView的一个可见区域,它对应了一个内存区域,由于内存区域的对象都是有生命周期的,可以动态申请创建和销毁,当然也可能是更新。于是就有了作用于这个内存区的操作,即surcaceCreated/Changed/Destroyed.
getHolder().addCallback(this);方法是获取surface的holder来注册callback也就是注册上面3个函数。
一般,我们会在surfaceCreated函数中创建另外一个线程。所以这里有2个线程,UI线程和渲染线程。画图线程是由UI线程调用surfaceCreated时创建的,在surfaceDestroyed调用时放回线程池。在此期间,画图线程负责图形的绘制。
在该模式下,UI线程负责和用户交互,画图线程负责绘制图形。我们知道,线程共享内存数据,所以surface是对于两个线程共享的。所以为了避免画图的时候UI线程也对surface进行操作的话,就在画图前对canvas加锁。
原文地址:http://6169621.blog.51cto.com/6159621/1605674