gpt4 book ai didi

android - SurfaceTexture 是否在 Activity 暂停/恢复周期中幸存下来?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:15:20 24 4
gpt4 key购买 nike

下面是我做的一个小实验,我在 Activity 的 onResume() 部分将 SurfaceTextureListener 附加到 TextureView。

  • 重新开始:表面纹理可用(“onSurfaceTextureAvailable”)

  • 方向改变:如我​​所料,表面纹理被破坏(“onSurfaceTextureDestroyed”),然后表面纹理可用(“onSurfaceTextureAvailable”)。

现在让我吃惊的是:

  • 任务切换然后恢复:表面纹理未被破坏(无“onSurfaceTextureDestroyed”)并且表面纹理不可用(无“onSurfaceTextureAvailable”)

在这些条件下,我能保证旧的 SurfaceTexture 仍然有效吗?我如何确保我确实知道我的 SurfaceTexture 何时可用?为什么方向改变不同于任务切换?我怎么知道?


public class MainActivity extends AppCompatActivity {
private final String TAG = "MainActivity";
TextureView mTextureView;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTextureView = (TextureView) findViewById(R.id.textureView);
}

@Override
public void onResume() {
super.onResume();
mTextureView.setSurfaceTextureListener(new TextureView.SurfaceTextureListener() {
@Override
public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
Log.d(TAG, "onSurfaceTextureAvailable");
}
@Override
public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {
Log.d(TAG, "onSurfaceTextureSizeChanged");
}
@Override
public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
Log.d(TAG, "onSurfaceTextureDestroyed");
return false;
}
@Override
public void onSurfaceTextureUpdated(SurfaceTexture surface) {
}
});
}
}

最佳答案

我会说这不是问题,也不是“正常”或“预期”的行为。这与您设备的硬件以及系统如何处理资源使用过载或硬件更改有很大关系。

如果你的设备有一个非常灵活的图形加速器,那么你的表面可能会在方向改变时幸存下来。请注意,当设备被命名时,视频模式会完全改变,并记住那些为桌面设备编程的时代,当所有 DirectX 表面(表面是视频内存)在视频模式从桌面窗口变为全屏或反之亦然。

同样的事情发生在,也许你的应用程序是一个资源使用率很高的游戏,它用尽了所有视频内存量,如纹理表面或后备缓冲区,等等......如果你切换到另一个应用程序和这个新应用程序需要表面空间,为了让这个新屏幕工作,你的部分或全部视频内存应该被杀死。

因此......你明白了吗?......可能会发生这样的情况,即您没有用完所有显存,或者您只是拥有一台带有最新软件的坏蛋设备,可以同时处理这两种情况< em>light 或 soft 更改不会破坏您的资源。

我的演讲的寓意是,你必须处理销毁,以防它被销毁,即使它从未在你的设备上发生过,否则你将有很多异常试图锁定 Canvas 或渲染空。

关于android - SurfaceTexture 是否在 Activity 暂停/恢复周期中幸存下来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34708126/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com