与许多android编程新手一样,我使用Lunar Lander作为实现SurfaceView的指南。我正在通过创建一个PONG的版本来练习。代码的基本结构与LunarLander相同。很明显,我很快就发现了Lunar Lander的bug。我解决这个问题的直接方式是通过在SurfaceCreated()中实例化一个新的Thread对象并启动它,当原始线程无法启动时(顺便说一句,与许多人建议的方法相同):Android Lunar Lander线程处理替代品
我的主要问题是这是否是一种好的做法?实例化一个新的线程对象意味着实例化游戏所需的所有内容,从而使所有先前实例化的数据悬而未决。如果你看看LunarLander本身,几乎游戏的每个核心组件都在线程中。我读过几个线程,人们跑
System.gc();
要做垃圾收集,但这通常被认为是不好的建议。
我想在另一个解决方法,而不是加入SurfaceDestroyed()中的线程,我只是打断它。而且,当活动失去焦点时,我不会让run()返回,而是让其在一切都暂停时在背景中完全没有任何操作。我让onDestroy()在活动生命周期中破坏了一切。希望是所有的数据都不需要重新实例化,而旧数据仍然悬而未决。这可以成为一个合适的选择吗?
在此先感谢。
我改变了我的代码来使用wait()和notify()来代替,这似乎比我在原始文章中提到的更好。但是当游戏不是焦点时,资源总是被释放出来会更好吗? – Dsodo 2011-03-29 19:30:59