Вот простое решение, которое может быть приемлемым в некоторых случаях, например, фоновый экран анимации и действия, состояния которых не нужно восстанавливать - действие вида поверхности должно завершаться на паузе.
protected void onPause() {
super.onPause();
finish();
}
Лучшее решение - переместить создание потока из конструктора в на SurfaceCretaed следующим образом:
@Override
public void surfaceCreated(SurfaceHolder holder) {
_thread = new TutorialThread(holder, this);
_thread.setRunning(true);
_thread.start();
}
Затем в цикле потока создайте флаг паузы:
if(!pause){
_panel.onDraw(c);
}
Наконец, в onPause и onRestore для действия установите флаг паузы:
protected void onResume() {
super.onResume();
pause = false;
}
protected void onPause() {
super.onPause();
pause = true;
}
Когда пользователь нажимает кнопку «Домой», вызывается SurfaceDestroyed, который закрывает текущий поток «_thread». Когда он вернется в приложение, surfaceCreated назначит ссылку «_thread» новому потоку, а старый объект потока будет удален сборщиком мусора.