gpt4 book ai didi

android - Activity 恢复时不会调用 onSurfaceCreated()

转载 作者:搜寻专家 更新时间:2023-11-01 07:54:40 26 4
gpt4 key购买 nike

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

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

我有一个 Activity A,托管一个实时绘制对象的 fragment ,运行一个线程来完成这个任务(定期调用我的 View 的绘制方法,并在 SurfaceView 上绘制它。

然后我切换到 Activity B,它承载另一个显示一些 UI 的 fragment 。
每当我切换到此 Activity B 时,我都可以看到 SurfaceView 正在被销毁,因此 onSurfaceDestroyed() 回调被调用并且我停止了我的在那里画线。

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

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

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

编辑:进度更新


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

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

我尝试绘制的布局由两个 View 组成,一个由框架管理,另一个使用 SurfaceView 绘制。当我从 B 回到 Activity A 时,我知道该 fragment 是可见的,因为我可以看到由框架管理的 View 被适当绘制,但是没有管理的 View 通过创建 SurfaceView 时启动的线程,因为尚未创建此 SurfaceView

最佳答案

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

myView.setVisibility(View.VISIBLE);

关于android - Activity 恢复时不会调用 onSurfaceCreated(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29796808/

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