これは私がしたことです:
@Override
public void surfaceCreated(SurfaceHolder arg0) {
if (thread.getState() == Thread.State.TERMINATED){
CreateThread(getHolder(),getContext());
}
thread.setRunning(true);
thread.start();
}
- CreateThreadでは、thread = new MyThread(...);が必要です。
- setRunning(boolean mRun)は、ブール値を使用して実行関数を開始/停止します(LunarLanderに触発されたと思います)。
onPause / onResumeを適切に使用したい場合は、スレッドで使用される変数をスレッド内に配置しないでください(LunarLanderで行われるように)。私はあなたにそのようにすることを提案します:
// Variables declarations
public MyGameThread CreateThread(...){
thread = new MyGameThread(holder, context, new Handler() {
// and so on....
});
}
onPause / onResumeを通過すると、スレッドは破棄されて再ウェルされますが、変数をスレッドの外に置くと、その後も引き続き使用できます。
保存する重要なものがある場合は、次のいずれかのオプションを使用してください。
- SharedPreferences:xmlが作成され、アプリの終了後も存続する変数とともにローカルに保存されます。
- 5〜10を超える変数を管理する場合は、SQLデータベース。この場合、前者のオプションの使用は困難です。