活动恢复时不会调用onSurfaceCreated()

时间:2015-04-22 11:56:47

标签: android android-fragments android-activity surfaceview

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

让我们试着解决这个问题:

我有一个活动 A ,托管fragment实时绘制对象,运行thread来完成此任务(调用我的绘图方法) View定期SurfaceView并将其绘制在SurfaceView上。

然后我切换到活动 B ,其中包含另一个显示某些UI的片段 每当我切换到此活动 B 时,我都会看到onSurfaceDestroyed()被销毁,因此调用SurfaceView回调并停止我的绘图线程。

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

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

对不起,我无法为这个问题提供任何代码,但它比任何其他类型都更具理论性。

编辑:进度更新

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

onDestroyView()在使用它的片段在调用SurfaceView之前变得不再可见时被销毁,但遗憾的是(我不明白为什么)当它没有重新创建时它再次变得可见,这是我的问题的根源。当片段变得可见时,我需要再次创建onSurfaceCreated(),以便在框架调用SurfaceView时启动绘图线程。

我正在尝试绘制的布局包含两个视图,一个由框架管理,另一个使用SurfaceView绘制。当我从 B 回到Activity A 时,我知道该片段是可见的,因为我可以看到框架管理的视图被适当地绘制,但是没有管理的那个由创建SurfaceView时开始的线程,因为尚未创建此select t1.name, t2.name, t3.name, t4.name from #t t4 join #t t3 on t4.id like t3.id+'__' join #t t2 on t3.id like t2.id+'__' join #t t1 on t2.id like t1.id+'__'

1 个答案:

答案 0 :(得分:4)

我仍然不知道为什么android框架不会自己创建SurfaceView,但我所要做的就是强制View的可见性{{1}这就是诀窍。当我明确告诉VISIBLESurfaceHolder的{​​{1}}方法中可见时,View回调开始按预期工作:

onResume()
相关问题