2012-09-20 15 views
16

Nella mia app per Android sviluppata con libGDX, utilizzo Gdx.app.exit() quando l'utente tenta di uscire dal gioco. Questo chiude il gioco, ma quando l'utente riavvia l'app tutti gli Textures sono criptati (oltre il punto di utilizzo dell'app). Ho notato che se forzo l'app da un task manager, allora si riavvierà correttamente.Libgdx app.exit() su Android che non chiude l'applicazione

Perché succede?

risposta

23

Hai riscoperto la mancata corrispondenza tra la durata degli oggetti Java (legata alla vita del processo dell'applicazione) e la durata degli oggetti texture (legata alla vita del contesto OpenGL che è legata alla visibilità dell'attività) .

Sull'app "uscita", viene interrotta solo l'attività e Android esegue il processo di memorizzazione nella cache in background. Quando si "riavvia" l'app, Android avvia una nuova attività nello stesso processo. In questo caso, l'attività sta trovando un oggetto Java Texture valido, ma i byte sottostanti che "punta a" nel contesto OpenGL sono scomparsi (poiché il contesto OpenGL viene invalidato quando l'attività non è più visibile).

La correzione consiste nel ricaricare le trame sulla creazione di attività. È necessario assicurarsi che tutti gli oggetti che contengono trame (e oggetti che contengono oggetti che contengono trame, ecc.) Siano legati al ciclo di vita dell'Attività. Generalmente questo significa evitare variabili statiche (che fanno parte del ciclo di vita dell'applicazione), ma puoi saltare attraverso i cerchi per invalidare e reinizializzare i globali se vuoi.

Problemi correlati