Не получается приостановить игровой поток

Есть активность 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 увеличенно.

Как правильно останавливать поток игры при сворачивании приложения?


Ответы (0 шт):