Жизненный цикл

libGDX приложение имеет определенный жизненный цикл, регулирующий состояния приложения, такие как создание, приостановка, возобновление, визуализация, утилизация.

ApplicationListener

Разработчик приложения перехватывает события жизненного цикла с помощью реализации ApplicationListener интерфейса и передачи экземпляра этой реализации в Application реализацию конкретного back-end. С этого момента libGDX приложение будет вызывать ApplicationListener каждый раз, когда будут события уровня приложения. Скелет Application реализации может выглядеть так:

public class MyGame implements ApplicationListener {
   public void create() {
   }

   public void render() {
   }

   public void resize(int width, int height) {
   }

   public void pause() {
   }

   public void resume() {
   }

   public void dispose() {
   }
}

Можно наследоваться от ApplicationAdapter класса, если нужны не все методы интерфейса.

После передачи интерфейса в Application, методы ApplicationListener будут вызываться следующим образом:

Сигнатура метода Описание
create() Метод вызывается один раз при создании приложения.
resize(int width, int height) Этот метод вызывается при каждом изменении размера экран в игре и когда игра не находится в состоянии паузы. Вызывается один раз сразу после create() метода. Параметры новой ширины и высоты экрана в пикселях.
render() Метод вызывается игровым циклом приложения каждый раз, когда должны быть выполнена визуализация. Обновление логики игры обычно выполняется в этом методе.
pause() На Android этот метод вызывается, когда нажата кнопка Home или при входящем звонке. На Desktop этот метод вызывается при выходе из приложения, перед dispose(). Это хорошее место, чтобы сохранить состояние игры.
resume() Этот метод вызывается только на Android, когда приложение возобновляет работу из состояния приостановки (паузы).
dispose() Вызывается когда приложение уничтожено. Ему предшествует вызов pause().

Следующая диаграмма иллюстрирует жизненный цикл приложения:

Жизненный цикл libGDX игры и приложения

Где главный цикл?

libGDX имеет событийный характер в основном из-за работы Android и Javascript. Явного главного цикла не существует, однако метод render() в ApplicationListener можно считать телом главного цикла.