activity 恢复时不调用 onSurfaceCreated()

onSurfaceCreated() is not called when activity resumes

我遇到了一个 SurfaceView 问题,这个问题似乎与对这些 SurfaceView 回调如何工作的任何误解有关。

让我们尝试从理论上解决这个问题:

我有一个 activity A,托管一个实时绘制对象的 fragment,运行宁一个 thread完成这个任务(周期性调用我的View的绘图方法,在SurfaceView上绘制)。

然后我切换到 activity B,其中包含另一个显示一些 UI.
的片段 每当我切换到此 activity B 时,我都可以看到 SurfaceView 正在被销毁,因此调用 onSurfaceDestroyed() 回调并停止绘图在那里线程。

现在一切都很好很明显,但是当我回到 activity A 时,SurfaceView 没有被创建,所以 onSurfaceCreated() 没有被调用,因此我的绘图线程不会启动。
通过调试,当我从B返回到A时,我可以看到我的View存在,如果线程可以绘制它是 运行ning,但对于 运行 的线程,我需要再次创建 SurfaceView

所以,我的问题(已编辑):
如果片段可见,为什么当我返回片段 A 时未创建 SurfaceView

很抱歉,我无法为这个问题提供任何代码,但它比任何其他问题都更具理论性。

编辑:进度更新


在做了更多的研究和测试之后,我意识到任何片段的 onCreateView() 在其生命周期中只被调用一次,直到它从片段管理器中删除并且不再由框架管理。

SurfaceView 在使用它的片段变得不再可见时被销毁,然后调用它是 onDestroyView(),但遗憾的是(我不明白为什么)当它再次可见时不会重新创建,这就是我的问题的根源。我需要在该片段变得可见时再次创建 SurfaceView,以便它可以在框架调用 onSurfaceCreated().

时启动我的绘图线程

我要绘制的布局由两个视图组成,一个由框架管理,另一个使用 SurfaceView 绘制。当我从 B 回到 Activity A 时,我知道片段是可见的,因为我可以看到框架管理的视图适当地绘制,但没有痕迹由创建 SurfaceView 时启动的线程管理,因为尚未创建此 SurfaceView

我仍然不知道为什么 android 框架不会自己创建 SurfaceView,但我所要做的就是强制 ViewVISIBLE 的可见性,这就成功了。当我明确告诉 ViewFragmentonResume() 方法中可见时,SurfaceHolder 回调开始按预期工作:

myView.setVisibility(View.VISIBLE);