我目前正在熟悉 Android,尝试 Lunar Lander 示例。
我发现,如果您离开应用程序(例如,点击通话按钮),它将破坏底层表面(调用surfaceDestroyed
).
向后导航(这将触发onWindowVisibilityChanged
)应用程序将崩溃,因为它将尝试绘制到表面而不重新创建它。
我可以输入一些代码吗onWindowVisibilityChanged
(或其他任何地方)这将重新生成 SurfaceView 的底层表面并很好地恢复执行?
感觉这应该是一个简单的函数调用,但我在 API 文档中找不到任何内容。
Thanks!
“mSurfaceExists = true”的这个解决方案也不适合我。看起来 SurfaceCreated() 没有被调用,因为 super.onWindowVisibilityChanged() 没有被调用。因此没有创建表面,也不会崩溃,因为 threas.start 没有被调用。
我相信问题是:
调用 thread.start() 会导致错误,因为线程已经启动。
但在 surfaceDestroyed() 中,thread.join 会导致线程完成并终止。并且线程一旦死亡就无法重新启动。
我猜测技巧是在 surfacecreated 中创建一个新线程,或者仅在用户调用应用程序完成(后退键)而不是暂停(主页键)时才导致线程完成。这可以通过在活动上调用 isFinishing() 来检查。
不确定这是否有效。我很快就会尝试这个。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)