我有一个带有4个屏幕的UI,我的应用程序非常笨重,并且在大约250MB的RAM使用情况下启动,在屏幕之间来回切换几次之后,在崩溃之前高达800MB的Ram。LibGdx - 当切换屏幕时发生严重内存泄漏
这是我如何处理处置:
每个屏幕extends
MainScreen,在那里我有这样的处理方法:
@Override
public void dispose()
{
stage.dispose();
System.out.println("Disposing Main Screen");
}
当设置一个新的屏幕我这样做:
dispose();
game.setScreen(new HighScoreScreen(game));
现在我在启动时使用AssetManager
加载我的所有资产,这意味着我不会卸载/提取屏幕中的任何资源,因为这会导致在下一个屏幕上显示一个空的黑匣子,而不是放置的资产。但这是一个问题吗?我有很多资源,例如8个不同的BitmapFonts
每次我加载一个扩展MainScreen的新屏幕时,都会进行初始化。但是,如果我尝试处理这些,则在下次尝试初始化它们时出现错误。
剩下的唯一东西是diposable纹理/字体,所以这是什么导致我的问题?我应该为每个屏幕加载/卸载吗?这看起来像会导致大量加载时的不良用户体验。
什么是您的资产的近似分辨率? –
@ BigTony.D我使用1080x1800分辨率,UI使用1GB和3个地图集,以及一些字体和一些声音。 –
您是否试图让资产更小?当我们被迫将所有资产缩减到最大时,我们遇到了与iOS类似的问题。分辨率为1024 x 1024,因为iOS上的应用程序崩溃。 –