相信开发过游戏的人都认识SurfaceView的双线程双缓冲机制。但一旦当前Activity退出到Home,再回到Activity便会报错:Thread already started.
寻找过网上的解决方法,一个是退出到Home时触发surfaceDestroyed()事件,令thread stop。回到Activity时触发surfaceCreated事件令thread.start。但结果依然提示Thread already started; 第二个方法就是每重新进入Activity触发onRestart()事件,new一次surfaceView,构造新的线程(我的new Thread是在surfaceview的构造函数里面,所以new了SurfaceView也同时会new
Thread),但debug一次发现Thread依然是旧的Thread内存地址,没有构造新的?最后一个方法,最为成功的,就是把new Thread放到surfaceCreated里面,而不是在构造函数里。这样每次返回Activity时都是新的Thread。那么原来的Thread怎么办呢?似乎不用处理,debug窗口已经看不到原来的那个Thread地址。
好了,问题已经解决。但这里有两个遗留问题需要讨论:一、为什么我new过一次surfaceView并同时new Thread以后,构造的不是新的线程,而是用回旧的线程?
二、假如用上述的第三个方法,旧的线程跑去哪里了?难道还在后台跑吗?那debug窗口为什么观察不到?