libgdx 项目中静态引用的最佳实践?
Best practice for static references in libgdx project?
我的 libGDX / box2d 项目的目标是 Android、iOS 和桌面作为平台。我在某处读到,使用静态纹理图集并不好,因为一旦应用程序处于后台,它可能会从内存中删除。因此,我将相同的纹理图集作为参数传递给我的控制器 类,但我仍然有许多用于各种目的的静态变量(常量)。我将它们用于路径、区域、box2d、音乐、用户数据……当应用程序处于后台时,这些变量是否也有可能被删除?我应该改变它吗?我将如何处理?
public static final String ATLAS_PATH = "atlas/myAtlas.atlas";
public static final String ATLAS_REGION_OFF = "off";
public static final String SFX_KEY_AIRHORN = "airhorn";
public static final short BIT_GROUND = 0x0001;
public static final String USER_DATA_HEAD = "head";
public static final short ID_AND_RENDER_ORDER_PLAYER = 1;
没有理由避免常量。 static final
字符串和原语被认为是常量,占用的内存很少。
对于其他类型的对象,如果您希望它始终存在于内存中,那么使用 static final
可能是有意义的,即使游戏关闭并重新打开也是如此。这不应该用于大型对象。在 Android 上,当您关闭 Activity 托管游戏时,任何静态引用的内容都会保留在内存中,直到游戏重新打开或 Android 完全销毁应用程序以恢复内存。
在没有 final
的情况下使用 static
会导致混乱,difficult-to-test 代码,并且很容易泄漏对象。不过,在某些情况下,它可能是最佳选择。
我的 libGDX / box2d 项目的目标是 Android、iOS 和桌面作为平台。我在某处读到,使用静态纹理图集并不好,因为一旦应用程序处于后台,它可能会从内存中删除。因此,我将相同的纹理图集作为参数传递给我的控制器 类,但我仍然有许多用于各种目的的静态变量(常量)。我将它们用于路径、区域、box2d、音乐、用户数据……当应用程序处于后台时,这些变量是否也有可能被删除?我应该改变它吗?我将如何处理?
public static final String ATLAS_PATH = "atlas/myAtlas.atlas";
public static final String ATLAS_REGION_OFF = "off";
public static final String SFX_KEY_AIRHORN = "airhorn";
public static final short BIT_GROUND = 0x0001;
public static final String USER_DATA_HEAD = "head";
public static final short ID_AND_RENDER_ORDER_PLAYER = 1;
没有理由避免常量。 static final
字符串和原语被认为是常量,占用的内存很少。
对于其他类型的对象,如果您希望它始终存在于内存中,那么使用 static final
可能是有意义的,即使游戏关闭并重新打开也是如此。这不应该用于大型对象。在 Android 上,当您关闭 Activity 托管游戏时,任何静态引用的内容都会保留在内存中,直到游戏重新打开或 Android 完全销毁应用程序以恢复内存。
在没有 final
的情况下使用 static
会导致混乱,difficult-to-test 代码,并且很容易泄漏对象。不过,在某些情况下,它可能是最佳选择。