即使使用Surface.lockCanvas(null)
并释放Surface.unlockCanvasAndPost()
,我也无法将Surface锁定到EGL(使用eglCreateWindowSurface()
)
错误代码:
EGLNativeWindowType 0x61dff830 already connected to another API
eglCreateWindowSurface:414 error 3003 (EGL_BAD_ALLOC)
我不需要保留Canvas绘制的表面,只需要能够更新SurfaceView表面并显示它。
如果在使用EGL之前不绘制到Surface,则它可以正常工作,如果我只放置:
Canvas c = mSurface.lockCanvas(null);
c.drawColor(Color.RED);
mSurface.unlockCanvasAndPost(c);
...我遇到了这个错误
这是预期的行为吗?这在真实设备4.1.2和AVD API25上都会发生。
有没有一种方法可以完全解锁Surface,使其不受Canvas绘图的影响(即使需要使用本机代码)?
相反的操作是有效的(EGL到Canvas)
TextureView
的行为相同
解决方法:
如果在我的TextureView
中,我销毁本地Surface对象并使用new Surface(mOldSurfaceTexture)
从先前的Surface所拥有的相同SurfaceTexture
重新创建它,则该错误不会出现。