前言
本文介绍SurfaceView大概原理,让你能够明白SurfaceView是如何工作的,源码基于7.x分析。
SurfaceView操作总结
-
操作SurfaceView时,更改layoutParams、surfaceView.setVisibility、滑动等基本任何一个对view的操作都会引起updateWindow,所以我们在对SurfaceView操作的时候要加倍小心,避免引起多次updateWindow,从回调上看,就是避免多次触发sufaceChange。
-
通过调整surfaceView大小、surfaceHolder.setFixedSize,这三种方式均能触发surfaceChange
-
如果SurfaceView的宽高是0,不会触发surfaceCreate
-
SurfaceViewContainer、SurfaceView和Visibility变更,可以看到使用container效果更好,能避免频繁surfaceCreate和surfaceDestroy:
- container.visibility(INVISIBLE) 不会触发onSurfaceDestroy,尺寸变动依然触发surfaceChanged;
- container.visibility(GONE) 不会触发onSurfaceDestroy,尺寸变动也不触发surfaceChanged;
- container.visibility(GO