アクティビティの onPause が呼び出されても、SurfaceView が破棄されません。
のスレッドの世話をしています
public void surfaceCreated(SurfaceHolder holder) {
if (mGameThread.getState() == Thread.State.TERMINATED) {
createGameThread(getHolder(), getContext());
}
mGameThread.setRunning(true);
mGameThread.start();
}
public void surfaceDestroyed(SurfaceHolder holder) {
boolean retry = true;
mGameThread.setRunning(false);
while (retry) {
try {
mGameThread.join();
retry = false;
} catch (InterruptedException e) {
}
}
}
ハックとして、onResume でスレッドの状態を確認する必要があり、スレッドが既に終了している場合は、アクティビティを終了します
protected void onResume() {
Log.d(mLogTag, "onResume()");
super.onResume();
if (mGameThread != null) {
if (mGameThread.getState() == Thread.State.TERMINATED) {
finish();
}
}
}
残念ながら、スレッド処理を surfaceDestroyed および surfaceCreated からアクティビティの onPause() および onResume() に移動することはできません。onPause() で SurfaceView を手動で破棄し、onResume() で再作成することは可能ですか?