onPause が発生してもスレッドが停止せず、2 つのスレッド インスタンスを実行できないため、「スレッドは既に開始されています」という logcat エラー onResume が発生します。この時点でスレッドを終了するにはどうすればよいですか? 私は次のようなことをする必要があると信じています:
gameLoopThread.setRunning(false);
しかし、それを私の balloonBasic onPause に追加することはできません。コンテキストが間違っていると思います。助けてください、コードは以下に表示されます。(コード例は本当に役に立ちます、ありがとう)
私の活動:
public class balloonBasic extends Activity {
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(new GameViewBasic(this));
}
public void onResume() {
super.onResume();
SoundManager.getInstance();
SoundManager.initSounds(this);
SoundManager.loadSounds();
}
public void onPause() {
super.onPause();
//what do I put here?
}
}
私のサーフェスビュー:
public class GameViewBasic extends SurfaceView {
...abbreviated declarations...
private static SurfaceHolder holder;
private static GameLoopThreadBasic gameLoopThread;
public GameViewBasic(Context context) {
super(context);
gameLoopThread = new GameLoopThreadBasic(this);
holder = getHolder();
holder.addCallback(new Callback() {
public void surfaceDestroyed(SurfaceHolder holder)
{
gameLoopThread.setRunning(false);
}
public void surfaceCreated(SurfaceHolder holder) {
createSprites();
mapspritegraphics();
gameLoopThread.setRunning(true);
gameLoopThread.start();
}
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height)
{
}
});
}
...abbreviated for brevity....
私のスレッド: public class GameLoopThreadBasic extends Thread { private GameViewBasic view; プライベート揮発性ブール値実行中 = false;
public GameLoopThreadBasic(GameViewBasic gameViewBasic) {
this.view = gameViewBasic;
}
public void setRunning(boolean run) {
running = run;
}
@Override
public void run() {
long ticksPS = 25; // =(1000/fps) ie 25ticksPS = 40fps
long startTime;
long sleepTime;
while (running) {
Canvas c = null;
startTime = System.currentTimeMillis();
try {
c = view.getHolder().lockCanvas();
synchronized (view.getHolder()) {
view.onDraw(c);
}
} catch (Exception f) {} //
finally {
if (c != null) {
view.getHolder().unlockCanvasAndPost(c);
}
}
sleepTime = (ticksPS - (System.currentTimeMillis() - startTime));
try {
if (sleepTime > 0)
sleep(sleepTime);
else
sleep(10);
} catch (Exception e) {}
}
}
}