Jor*_*GRC 3 android surfaceview android-fragments android-activity
我遇到了一个SurfaceView问题,这个问题似乎与对这些SurfaceView回调如何工作的任何误解有关。
让我们尝试从理论上解决这个问题:
我有一个活动A,托管一个fragment正在实时绘制对象的活动,运行一个thread来完成此任务(定期调用我的绘图方法View并在 上绘制它SurfaceView)。
然后我切换到 Activity B,它托管另一个显示一些 UI 的片段。
每当我切换到此活动B时,我都可以看到它SurfaceView正在被销毁,因此onSurfaceDestroyed()调用回调并在那里停止我的绘图线程。
现在一切都很好而且很明显,但是当我返回到活动A时,SurfaceView没有创建 ,因此onSurfaceCreated()没有调用 ,因此我的绘图线程不会启动。通过调试,当我从B返回到A
时,
我可以看到我的存在,并且如果线程正在运行,则可以绘制它,但是为了让我的线程运行,我需要再次创建它。ViewSurfaceView
所以,我的问题(已编辑):如果片段可见,
为什么SurfaceView当我回到片段A时没有创建?
很抱歉,我无法为这个问题提供任何代码,但它比任何其他问题都更具理论性。
编辑:进度更新
经过更多的研究和测试,我意识到任何片段onCreateView()在其生命周期中只被调用一次,直到它从片段管理器中删除并且不再由框架管理。
SurfaceView当使用它的片段在调用它之前不再可见时,它会被销毁onDestroyView(),但遗憾的是(我不明白为什么)当它再次可见时,它不会被重新创建,这就是我的问题的根源。当该片段变得可见时,我需要SurfaceView再次创建它,以便它可以在框架调用时启动我的绘图线程onSurfaceCreated()。
我尝试绘制的布局由两个视图组成,一个由框架管理,另一个使用 SurfaceView 绘制。当我从B返回到 Activity A时,我知道该片段是可见的,因为我可以看到由框架管理的视图正确绘制,但没有跟踪创建时启动的线程管理的视图,因为这还没有已被创建。SurfaceViewSurfaceView
我仍然不知道为什么 android 框架不会SurfaceView自己创建 ,但我所要做的就是强制 的View可见性VISIBLE,这样就成功了。当我明确告诉 回调在 的方法中可见SurfaceHolder时,回调开始按预期工作:ViewonResume()Fragment
myView.setVisibility(View.VISIBLE);
Run Code Online (Sandbox Code Playgroud)