无法将SurfaceSxture设置为已发布的SurfaceTexture

时间:2016-01-06 16:36:44

标签: java android textureview

onPause中,我使用mTextureViewSurface

将surfaceTexture存储到类变量mTextureView.getSurfaceTexture()

onResume我做:

if (mTextureView.isAvailable()) {
    ...
} else {
    mTextureView.setSurfaceTextureListener(mSurfaceTextureListener);
}

在那里我尝试恢复surfaceTexture

@Override
public void onSurfaceTextureAvailable(SurfaceTexture texture, int width, int height) {
        if (mTextureViewSurface != null) {
            mTextureView.setSurfaceTexture(mTextureViewSurface);
        }
}

但是我收到了错误 来自https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/view/TextureView.java#725

java.lang.IllegalArgumentException: Cannot setSurfaceTexture to a released SurfaceTexture

我很累,可能只是需要去睡觉,但我想我会在这里问,因为我可能只是在掩饰某些东西。

处理已发布的surfaceTextures的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

来自onSurfaceTextureDestroyed()的返回值非常重要 - 您需要返回false以防止系统销毁它(并且您最终需要手动释放它)。

您可以找到一个代码的工作示例,该代码可以快速保存SurfaceTextures" Grafika "double decode"活动中的活动暂停/恢复(例如,方向更改)。

请注意Android< = 4.4中的一个错误,如果您尝试重新挂接onSurfaceTextureAvailable()它会使其工作变得棘手,那么它就会变得非常棘手 - 但它会赢得'得到更新。