Я не думаю, что эта часть необходима:
synchronized (mPauseLock) {
while (!running) {
try {
mPauseLock.wait();
} catch (InterruptedException e) {
}
}
}
Если вы используете это, вам нужно будет уведомить, чтобы снять блокировку по ожиданию ();Но попробуйте использовать тот же код без синхронизированного (mPauseLock)
РЕДАКТИРОВАТЬ:
Решение вашей проблемы, когда вы нажимаете на кнопку Home, приложение вылетает, сделайте это:*
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
gameView = new GameView(this);
setContentView(gameView);
}
@Override
public void onPause(){
super.onPause();
gameView.gameLoopThread.setRunning(false);
finish();
}
А в GameView (SurfaceView) создайте конструктор:
public GameLoopThread gameLoopThread;
public GameView(Context context) {
super(context);
gameLoopThread = new GameLoopThread(this);
}