2012-09-20 16 views
16

W mojej aplikacji na Androida opracowanej przez libGDX używam Gdx.app.exit(), gdy użytkownik próbuje wyjść z gry. To zamyka grę, ale gdy użytkownik ponownie uruchomi aplikację, wszystkie kody są zaszyfrowane (poza używaniem aplikacji). Zauważyłem, że jeśli wymuszam zamknięcie aplikacji od menedżera zadań, to ponownie uruchomi się poprawnie.Libgdx app.exit() na Android nie zamykanie aplikacji

Dlaczego tak się dzieje?

Odpowiedz

23

Ponownie wykryto niedopasowanie między czasem życia obiektów Java (związanym z okresem użytkowania procesu aplikacji) a czasem życia obiektów tekstury (związanymi z życiem kontekstu OpenGL, który jest powiązany z widocznością działania) .

W aplikacji "exit", tylko działanie zostało zakończone, a system Android buforuje proces w tle. Po "ponownym uruchomieniu" aplikacji Android uruchamia właśnie nową aktywność w tym samym procesie. W tym przypadku działanie znajduje prawidłowy obiekt tekstury Java, ale leżące poniżej bajty, które "wskazuje" w kontekście OpenGL, zniknęły (ponieważ kontekst OpenGL jest unieważniany, gdy działanie nie jest już widoczne).

Poprawka polega na ponownym załadowaniu tekstur podczas tworzenia aktywności. Musisz upewnić się, że wszystkie obiekty zawierające tekstury (oraz obiekty zawierające obiekty zawierające tekstury itp.) Są powiązane z cyklem życia działania. Ogólnie oznacza to unikanie zmiennych statycznych (które są częścią cyklu życia aplikacji), ale można przeskoczyć przez obręcze, aby unieważnić i ponownie zainicjować globale, jeśli chcesz.

Powiązane problemy