2012-09-20 26 views
16

在我用libGDX開發的Android應用程序中,當用戶試圖退出遊戲時,我使用Gdx.app.exit()。這會關閉遊戲,但當用戶重新啓動應用程序時,所有Textures都會被加擾(超出使用該應用程序的程度)。 我注意到,如果我強制關閉從任務管理器的應用程序,那麼它會正常重啓。Android上的Libgdx app.exit()不關閉應用程序

爲什麼發生?

回答

23

您已經重新發現了Java對象的生命週期(綁定到應用程序進程的生命週期)和紋理對象的生命週期之間的不匹配(綁定到與活動的可見性相關的OpenGL上下文的生命週期) 。

在應用程序「退出」中,只有Activity已退出,Android正在後臺緩存進程。當您「重新啓動」應用程序時,Android只需在同一個進程中啓動一個新的Activity。在這種情況下,Activity找到了一個有效的Java Texture對象,但是它在OpenGL上下文中「指向」的底層字節消失了(因爲當Activity不再可見時,OpenGL上下文無效)。

修復是在活動創建時重新加載紋理。您必須確保所有包含紋理的對象(以及包含包含紋理的對象等的對象)都綁定到Activity生命週期。通常這意味着避免使用靜態變量(這是應用程序生命週期的一部分),但是如果需要的話,您可以跳過這些循環以使全局變量無效並重新初始化。