【问题标题】:Cannot setSurfaceTexture to a released SurfaceTexture无法将 SurfaceTexture 设置为已发布的 SurfaceTexture
【发布时间】:2016-01-06 16:36:43
【问题描述】:

onPause 中,我使用mTextureView.getSurfaceTexture() 将surfaceTexture 存储到类变量mTextureViewSurface

onResume 我愿意:

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

在那里我尝试恢复表面纹理

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

但是我得到了错误 java.lang.IllegalArgumentException: Cannot setSurfaceTexture to a released SurfaceTexture 来自https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/view/TextureView.java#725

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

处理释放的表面纹理的正确方法是什么?

【问题讨论】:

    标签: java android textureview


    【解决方案1】:

    onSurfaceTextureDestroyed() 的返回值很重要——你需要返回false 以防止系统破坏它(最终你需要手动释放它)。

    您可以在 Grafika "double decode" 活动中找到在“快速”活动暂停/恢复(例如,用于方向更改)期间保留 SurfaceTextures 的代码的工作示例。

    请注意,Android onSurfaceTextureAvailable() 中重新附加,它似乎可以工作,但不会获得更新。

    【讨论】:

    • 老兄,非常感谢!我刚刚重新审视了这个,它工作得很好!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多