gpt4 book ai didi

java - Android:使用 SurfaceView 重新获得焦点

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:59:50 35 4
gpt4 key购买 nike

我目前正在研究 Android,正在研究 Lunar Lander 示例。

我发现,如果您离开应用程序(例如,点击调用按钮),它会破坏底层表面(调用 surfaceDestroyed)。

向后导航(这将触发 onWindowVisibilityChanged)应用程序将崩溃,因为它会尝试绘制到表面而不重新创建它。

是否有一些代码可以放入 onWindowVisibilityChanged(或其他任何地方)来重新生成 SurfaceView 的底层表面并很好地恢复执行?

感觉这应该是一个简单的函数调用,但我在 API 文档中找不到任何内容。

谢谢!

最佳答案

“mSurfaceExists = true”的这个解决方案也不适合我。看起来 surfaceCreated() 没有被调用,因为 super.onWindowVisibilityChanged() 没有被调用。所以没有创建表面,也不会崩溃,因为没有调用 threas.start。

我认为问题是:调用 thread.start() 会导致错误,因为线程已经启动。但在 surfaceDestroyed() 中,thread.join 导致线程完成并死亡。并且一个线程一旦死了就不能重新启动。

我猜诀窍是在 surfacecreated 中创建一个新线程,或者仅在用户调用应用程序完成(后退键)而不是暂停(home 键)时使线程完成。这可以通过在 Activity 上调用 isFinishing() 来检查。

不确定这是否有效。我很快就会尝试这个。

关于java - Android:使用 SurfaceView 重新获得焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/672325/

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