surfaceView是视图(View)的继承类,这个视图里内嵌了一个专门用于绘制的surface。我们可以控制这个surface的格式和尺寸。SurfaceView控制这个surface绘制的位置。surface类直接继承Object,对应了一块屏幕缓冲区,每个窗口window对应一个Surface,任何View都是画在Surface上的,传统的view共享一块屏幕缓冲区。
一般在直播或游戏软件等用的较多
surfaceView内部有两个线程:主线程和渲染线程.
渲染线程可以在主线程之外的线程中向屏幕上绘图。所以surfaceView可以在子线程内更新UI
这种双线程的设计模式,极大的消耗了CPU内存,为此,SurfaceView可见时才被创建,SurfaceView隐藏时便被销毁,从而达到节约内存的目的。
surfaceView用法
//创建surfaceView对象
private SurfaceView sfv_Show;
//调用SurfaceView的getHolder方法,得到SurfaceView的控制器
SurfaceHolder holder = sfv_Show.getHolder();
//SurfaceHolder添加回调函数,重写该回调函数的onCreate方法和onDestroy方法。
//实现SurfaceView的状态监听
holder.addCallback(new SurfaceHolder.Callback() {
@Override //SurfaceVIew对象被创建的时候,执行该方法
public void surfaceCreated(SurfaceHolder surfaceHolder) {
}
@Override//SurfaceView被改变时候,执行该方法
public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) {
}
@Override //SurfaceVIew被销毁时,执行该方法
public void surfaceDestroyed(SurfaceHolder surfaceHolder) {
isRun=false;
}
});
//SurfaceView只在surfaceCreated和surfaceDestroyed之间有效,所以要确保渲染线程访问的是合法有效的Surface。
surfaceView可见时才被创建,隐藏时就被销毁
surfaceView 空指针异常
当主界面执行onCreate生命周期时,surfaceView还未被创建,此时如果调用SurfaceView就会报空指针异常
一般在直播或游戏软件等用的较多
surfaceView内部有两个线程:主线程和渲染线程.
渲染线程可以在主线程之外的线程中向屏幕上绘图。所以surfaceView可以在子线程内更新UI
这种双线程的设计模式,极大的消耗了CPU内存,为此,SurfaceView可见时才被创建,SurfaceView隐藏时便被销毁,从而达到节约内存的目的。
surfaceView用法
//创建surfaceView对象
private SurfaceView sfv_Show;
//调用SurfaceView的getHolder方法,得到SurfaceView的控制器
SurfaceHolder holder = sfv_Show.getHolder();
//SurfaceHolder添加回调函数,重写该回调函数的onCreate方法和onDestroy方法。
//实现SurfaceView的状态监听
holder.addCallback(new SurfaceHolder.Callback() {
@Override //SurfaceVIew对象被创建的时候,执行该方法
public void surfaceCreated(SurfaceHolder surfaceHolder) {
}
@Override//SurfaceView被改变时候,执行该方法
public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) {
}
@Override //SurfaceVIew被销毁时,执行该方法
public void surfaceDestroyed(SurfaceHolder surfaceHolder) {
isRun=false;
}
});
//SurfaceView只在surfaceCreated和surfaceDestroyed之间有效,所以要确保渲染线程访问的是合法有效的Surface。
surfaceView可见时才被创建,隐藏时就被销毁
surfaceView 空指针异常
当主界面执行onCreate生命周期时,surfaceView还未被创建,此时如果调用SurfaceView就会报空指针异常