SurfaceView 在分离时清除它的内容

SurfaceView clears it's contents when detaching

我在 Fragment 中使用 SurfaceView。当我用另一个片段替换片段时,SurfaceView 闪烁黑色一秒钟,然后 SurfaceView 的片段被分离。

一个流行的建议是使用 setZOrderOnTop(true)。但是当我使用它时,SurfaceView 只是具有与背景相同的颜色并且不会闪烁。但随后它显示在其他 UI 元素之上并产生更多问题。

我注意到在这两种情况下,SurfaceView 在销毁之前都会清除其内容,所以 setZOrderOnTop 无关紧要。

谁能解释为什么 SurfaceView 在分离时清除其内容?但是另一个 UI 元素(按钮、列表)没有这样的行为。

编辑 当调用 SurfaceView class 的方法 onWindowVisibilityChanged 时,SurfaceView 被清除。

我找到了解决方法 - 首先添加新片段,然后显示它并隐藏旧片段。然后在异步任务中删除旧的。解决方案有点混乱,但我没有找到更好的解决方案。 在下面的示例中,旧片段具有标记 fragment,而新片段具有标记 fragment2.

FragmentManager fragmentManager = getSupportFragmentManager();
                fragmentManager.beginTransaction().add(R.id.content_frame, fragment, "fragment2").commit();
                fragmentManager.beginTransaction().show(fragment).commit();
                fragmentManager.beginTransaction().hide(fragmentManager.findFragmentByTag("fragment")).commit();
                Timer timer = new Timer();
                timer.schedule(new TimerTask() {

                    @Override
                    public void run() {
                        getSupportFragmentManager().beginTransaction().remove(getSupportFragmentManager().findFragmentByTag("fragment")).commit();                      
                    }
                }, 1000);

在这种方法中,SurfaceView 也会闪烁黑色,但此时不可见。