Не получается приостановить игровой поток
Есть активность MainActivity:
class MainActivity : AppCompatActivity() {
private lateinit var gameView: GameView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val display = windowManager.defaultDisplay
val size = Point()
display.getSize(size)
gameView = GameView(this, size.x, size.y)
setContentView(gameView)
}
override fun onPause() {
super.onPause()
gameView.pause()
}
override fun onResume() {
super.onResume()
gameView.resume()
}
}
Вот класс GameView:
@SuppressLint("ViewConstructor")
class GameView(context: Context, private val screenWidth: Int, private val screenHeight: Int) :
SurfaceView(context), Runnable, SensorEventListener {
private val tag = this::class.java.simpleName
@Volatile
private var playing = false
private var gameThread: Thread? = null
private var distance = 0L
init {
/* Инициализация */
}
override fun run() {
while (playing) {
update()
draw()
}
}
private fun update() {
/* Обновление координат объектов, логические операции надо объектами */
distance++
}
}
private fun draw() {
if (holder.surface.isValid) {
val canvas = holder.lockCanvas()
/* Отрисовка объектов по заданным координатам */
holder.unlockCanvasAndPost(canvas)
}
}
@SuppressLint("ClickableViewAccessibility")
override fun onTouchEvent(event: MotionEvent): Boolean {
if (event.action == MotionEvent.ACTION_UP) {
/* Реакция на касание экрана */
}
return true
}
fun pause() {
playing = false
try {
gameThread?.join()
} catch (e: InterruptedException) {
e.printStackTrace()
}
}
fun resume() {
playing = true
gameThread = Thread(this)
gameThread?.start()
}
}
При сворачивании приложения (нажатие на кнопку "Домой") ожидается, что прервётся цикл обновления и отрисовки while(playing) {...}, но на деле, при разворачивании приложения, я вижу, что цикл не прерывался - местоположения объектов меняются, значение переменной distance увеличенно.
Как правильно останавливать поток игры при сворачивании приложения?