Libgdx app.exit() на Android не закрывает приложение
В моем Android-приложении, разработанном с использованием libGDX, я использую Gdx.app.exit()
когда пользователь пытается выйти из игры. Это закрывает игру, но когда пользователь перезапускает приложение, все Textures
зашифрованы (за пределами использования приложения). Я заметил, что если я принудительно закрою приложение из диспетчера задач, то оно будет перезапущено должным образом.
Почему это происходит?
1 ответ
Вы заново обнаружили несоответствие между временем жизни объектов Java (связанным с жизнью процесса приложения) и временем жизни объектов текстуры (связанным с жизнью контекста OpenGL, который связан с видимостью Activity).
При выходе из приложения происходит выход только из Activity, а Android кеширует процесс в фоновом режиме. Когда вы "перезапускаете" приложение, Android просто запускает новое действие в том же процессе. В этом случае Activity находит действительный объект текстуры Java, но базовые байты, на которые он "указывает" в контексте OpenGL, исчезли (поскольку контекст OpenGL становится недействительным, когда Activity больше не видна).
Исправление заключается в повторной загрузке текстур при создании активности. Вы должны убедиться, что все ваши объекты, которые содержат текстуры (и объекты, которые содержат объекты, содержащие текстуры и т. Д.), Связаны с жизненным циклом Activity. Обычно это означает избегание статических переменных (которые являются частью жизненного цикла приложения), но вы можете перепрыгивать через обручи, чтобы сделать недействительными и повторно инициализировать глобальные переменные, если хотите.