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

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

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

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

4b9b3361

Ответ 1

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

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

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