surfaceView 使用心得

surfaceView
surface
surfaceHoldlr

surface是一块内存提供一个canvas可以换图,surfaceView给surface提供了显示窗口,surfaceHolder可以监听suiface

发生的事件,如创建事件,销毁事件,大小改变事件。

surfaceView影响着surface的生命周期,当surfaceView隐藏时,系统会销毁surface。当surfaceView显示时会创建

surface。

surface画图是双缓冲的,不用画布,直接在窗口上进行绘图叫做无缓冲绘图。用了一个画布,将所有内容都先画到画布

上,在整体显示窗口上,就该叫做单缓冲绘图,那个画布就是一个缓冲区。用了两个画布,一个用在正在绘制用,绘制完

后与另一个交换,一个用在正在显示用,这样就叫做双缓冲绘图。


在surface上画图的可以放到一个单独的线程里面去画,画之前锁定surface(surfaceHolder.lockCanvas),防止有多个

线程同时画,画完解锁提交(surfaceHolder.unlockCanvasAndPost(canvas))

surface在一个线程中加锁绘画没有结束之前执行surfaceView隐藏销毁surface,销毁会等绘画结束之后销毁(他们两者

竞争了某一把锁,这时主线程会由于竞争锁阻塞)。


surface在oncreated之前是不能使用的,所以操作surface要用surfaceHolder监听surface 的oncreated事件,在这个事

件发生之后操作surface(例如画图什么的)。

猜你喜欢

转载自wenzongliang.iteye.com/blog/2152366