1.为什么提出SurfaceView?
Android系统提供了View进行绘图处理,那么为什么还要提出SurfaceView呢?因为Android系统通过发出VSYNC信号来进行屏幕的重绘,刷新时间间隔为16ms。如果View在16ms内完成绘图的逻辑,那么用户在视觉上就不会出现卡顿感觉;反之如果执行逻辑繁琐,需要频繁刷新页面,例如:游戏界面,那么就会不断阻塞主线程,从而导致画面卡顿。在自定义Log中经常会出现警告:"Skipped 47 frames! The application may be doing too much work on its main thread"为了避免这一问题产生,Android系统提供了SurfaceView组件来解决这个问题。
2.SurfaceView与View的区别?
View适用于主动更新,SurfaceView适用于被动更新,例如频繁更新
Viwe在主线程中对画面更新,而SurfaceView 通常会通过子线程来刷新
View在绘图过程中没采用双缓冲机制,而SurfaceView在底层就实现了双缓冲机制
总结一句话:如果你自定义View需要频繁更新,进行繁琐的绘图逻辑,刷新时处理数据量大,都可以考虑使用SurfaceView替代
3.自定义SurfaceView模版