Libgdx app.exit() на Android не закрывает приложение

В моем Android-приложении, разработанном с использованием libGDX, я использую Gdx.app.exit() когда пользователь пытается выйти из игры. Это закрывает игру, но когда пользователь перезапускает приложение, все Textures зашифрованы (за пределами использования приложения). Я заметил, что если я принудительно закрою приложение из диспетчера задач, то оно будет перезапущено должным образом.

Почему это происходит?

1 ответ

Решение

Вы заново обнаружили несоответствие между временем жизни объектов Java (связанным с жизнью процесса приложения) и временем жизни объектов текстуры (связанным с жизнью контекста OpenGL, который связан с видимостью Activity).

При выходе из приложения происходит выход только из Activity, а Android кеширует процесс в фоновом режиме. Когда вы "перезапускаете" приложение, Android просто запускает новое действие в том же процессе. В этом случае Activity находит действительный объект текстуры Java, но базовые байты, на которые он "указывает" в контексте OpenGL, исчезли (поскольку контекст OpenGL становится недействительным, когда Activity больше не видна).

Исправление заключается в повторной загрузке текстур при создании активности. Вы должны убедиться, что все ваши объекты, которые содержат текстуры (и объекты, которые содержат объекты, содержащие текстуры и т. Д.), Связаны с жизненным циклом Activity. Обычно это означает избегание статических переменных (которые являются частью жизненного цикла приложения), но вы можете перепрыгивать через обручи, чтобы сделать недействительными и повторно инициализировать глобальные переменные, если хотите.

Другие вопросы по тегам