Я не уверен, если у вас есть один или два потока в этом вопросе, я предполагаю 2. Вам нужно сделать три вещи, когда вы вызываете onPause:
1 - Save the state of the application (all game variables, states, etc)
2 - Kill the surfaceView by calling suspend.
3 - Kill the other thread (we'll call it Thread B).
Уничтожение нити Bэто твоя проблема, я думаю.Вы хотите прервать поток и попросить его выйти, иначе, когда вы вызываете onPause, ваш поток все равно будет делать свое дело.Затем, когда вы вернетесь в игру, поток попытается создать заново, что вызывает проблему.Есть 2 способа правильно завершить поток:
- В цикле
while()
вашего потока есть логическое значение 'run', которое while(run)
выполнит код.Когда вы изменяете run на false, поток завершается. - Если ваш поток спит (я предполагаю, что это может произойти, так как это игра и будет работать без времени), перехватите
InterruptedException
и затем выйдите.Когда вы хотите уничтожить поток, вы добавляете исключение в поток.
Первый вариант, безусловно, самый простой.