- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
像许多 android 编程的新手一样,我使用 Lunar Lander 作为实现 SurfaceView 的指南。我正在通过创建一个版本的 PONG 来练习。代码的基本结构与 LunarLander 相同。显然,我很快就发现了 Lunar Lander 中的错误。我解决这个问题的直接方法是在 SurfaceCreated() 中实例化一个新的 Thread 对象并在原始线程无法启动时启动它(顺便说一下,这与很多人建议的方法相同):
我的主要问题是这是否真的是一种好的做法?实例化一个新的线程对象意味着实例化游戏所需的一切,从而使所有先前实例化的数据都挂起。如果你看看 LunarLander 本身,几乎游戏的每个核心组件都在线程中。我读过一些人们运行的话题
System.gc();
进行垃圾收集,但这通常被认为是错误的建议。
我正在尝试另一种解决方法,我不是在 SurfaceDestroyed() 中加入线程,而是直接中断它。此外,当 Activity 失去焦点时,我不会让 run() 返回,而是让它在后台完全不做任何事情,而其他一切都暂停了。我让 Activity 生命周期中的 onDestroy() 销毁一切。希望是所有数据都不需要重新实例化,而旧数据则悬而未决。这是一个合适的替代方案吗?
提前致谢。
最佳答案
如果在重新获得焦点时正确完成必要的同步,那么在失去焦点时保留线程对象当然是可能的。
但是,为了简单起见并在未获得焦点时释放资源,您可以将游戏状态提取到不属于游戏线程的类中,而是在启动时将其传递给线程,从而允许您在 surfaceDestroyed 中停止线程() 与原始代码相同。
很明显,每次您失去焦点时,线程对象都会变成垃圾,但是收集这些微不足道的字节应该不是问题。
关于java - Android Lunar Lander 线程处理替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5431590/
我正在尝试在 上安装turtlebot ROS-月球 (ubuntu 17.04)但它一直给我这个错误: E: Unable to locate package ros-lunar-turtlebot
我正在手动检查由 VK_LAYER_LUNARG_standard_validation 包裹的底层 已找到包装器,但它应该根据 documentation 包装一些验证层不是。 我正在这样查询图层:
像许多 android 编程的新手一样,我使用 Lunar Lander 作为实现 SurfaceView 的指南。我正在通过创建一个版本的 PONG 来练习。代码的基本结构与 LunarLander
在月球着陆器示例(由 Google 的 Android 网站提供)中,在名为“run()”的方法中有一个主循环。下面是: @Override public void r
这个问题不太可能对任何 future 的访客有帮助;它只与一个较小的地理区域、一个特定的时间点或一个非常狭窄的情况相关,通常不适用于全世界的互联网受众。如需帮助使此问题更广泛适用,visit the
我正在尝试在 Eclipse 中为 Android 创建 Lunar Lander 示例,但某些代码未编译。代码中任何引用“R”的地方。给我错误。起初它说 R 没有被识别或声明,所以我通过快速修复菜单
我是一名优秀的程序员,十分优秀!