需要线程标志的原因:
th = new Thread();
th.start();
若没有flag标志:
当按下back或home键时,SurfaceView的状态变化:
back按钮:SurfaceDestroyed-> 构造函数-> SurfaceCreated -> SurfaceChanged
home按钮:SurfaceDestroyed-> SurfaceCreated -> SurfaceChanged
1.
th = new Thread();
th.start(); 应该尽量放在一起,以减少不必要错误。如:防止重复执行start()而出错。
2. 两者放在一起之后,
如果没有结束线程的操作,就会导致只不断创建线程,导致线程越来越多(如果线程是死循环的话(在游戏中,经常是死循环的线程),则线程不会自己结束)。
解决方法: 在 SurfaceDestroyed 中设置flag为false。 此flag 是线程while死循环的条件:while(flag),这样在 SurfaceDestroyed执行后,线程也自动销毁。
3. 那么,为了保证在按了home后,线程也能够重新创建, 那么线程初始化和执行语句只能 添加在SurfaceCreated中,才能保证无论是按back还是home,再次返回时都能够重新创建线程。
结论: 上面3。
参考书:android游戏编程之从零开始