Android 我应该何时加载和处置资源

Android 我应该何时加载和处置资源,android,libgdx,resources,assets,Android,Libgdx,Resources,Assets,关于这个问题,我读了很多书,但我想听听在我的情况下应该如何处理这个问题的建议 我有一个用户界面,大约有8个不同的屏幕,我不打算在屏幕之间交换时加载/处理资源,因为这样会造成非常糟糕的用户体验 然而,我也有12个迷你游戏,你可以从我的UI开始,这就引出了我的问题;我应该何时装载和处置资产 在我看来,我有两个选择: 选项A:我在游戏开始时加载每一项资产,但这似乎是一个糟糕的解决方案 选项B:我在游戏开始时只加载UI资源,然后在每个迷你游戏开始时加载它们的资源,并在它们完成后处理它们 如果我选择了

关于这个问题,我读了很多书,但我想听听在我的情况下应该如何处理这个问题的建议

我有一个用户界面,大约有8个不同的屏幕,我不打算在屏幕之间交换时加载/处理资源,因为这样会造成非常糟糕的用户体验

然而,我也有12个迷你游戏,你可以从我的UI开始,这就引出了我的问题;我应该何时装载和处置资产

在我看来,我有两个选择:

  • 选项A:我在游戏开始时加载每一项资产,但这似乎是一个糟糕的解决方案
  • 选项B:我在游戏开始时只加载UI资源,然后在每个迷你游戏开始时加载它们的资源,并在它们完成后处理它们

如果我选择了选项B,那么我是否应该在小游戏开始之前处置所有UI资产?这意味着我必须在小游戏结束后重新加载它们(每个小游戏都有50秒长)。这似乎对用户不友好,但如果我在启动小游戏时不处理UI资源(小游戏完成后用户被重定向到UI),会不会导致内存泄漏?

真正的问题是你有多少资源,它们有多大(它们有什么分辨率)

最好的办法似乎是将所有关于图形的内容都保存在一个大的目录中——但是你必须记住,创建大于2048x2048px的图集不是一个好主意——并在开始时加载该图集(启动后制作一些加载屏幕),然后在应用程序生命周期结束时卸载

当然你应该使用实例,我想你已经使用了

在我看来,同样的情况是,所有资产都在两个、三个地图集上。我也会这样对待音乐——不幸的是,没有音乐地图册:)


如果资产数量非常巨大,并且你不能在一开始就加载一次,恐怕最好的办法是在小游戏开始之前直接加载,在小游戏结束后直接处理——这似乎是管理内存最有效的方法。另外,我猜用户在开始和结束小游戏时会准备好看到一些加载屏幕


您也可以尝试实现一些加载资产的技术,但这实际上取决于您拥有的资产数量以及应用程序的特征

最佳解决方案是使用libgdx,加载所有内容,并让assetmanager为您处理所有内容,当您不再使用任何资产时,您只需处置资产管理器。我已经使用了资产管理器,但您仍然需要加载/卸载资源。好的,您可以加载第一级的资源,当用户在玩时,您可以启动一个新线程加载下一级的资源,当您更改小游戏时,启动一个线程来处理最后一级资源并加载下一级资源等等,确保您需要检查每个级别的更改,如果资源已加载,则让用户等待。对于assetmanager have update(int millis),请参阅今天的设备内存,我不认为有理由这样做,除非您拥有非常巨大的资产,如果您在内存中加载所有内容,那么处理效率会更高,并且会使用更少的cpu进程,只要对测试用例做一个基准测试,看看有什么更好。@Hllink这就是我的想法。但今天,当我第一次在iPhone4上试用时,应用程序在加载了我96%的资源后崩溃了。如果我删除应用程序加载的大约30%的资源,就可以了。所以我在寻找替代方案。谢谢你的回答!我会说,每个小游戏我都有1个atlas+1 background.png,有时是2个。我使用1080x1800分辨率,所以图像非常大。13到目前为止,我的朋友,资产文件夹是16,9MB。然后我会在每个小游戏前后加载atlas的开头和背景(当然,对于这个游戏:)。另一个选择是将图形大小调整为1024x1024,并将它们按四个进行打包,然后在应用程序中再次将它们扩展到1800x1800,但这可能会导致一些质量问题。最后一个镜头-如果小游戏是连续的,你可以在开始的时候为其中的4个加载背景,然后在下一个之前动态加载。就像这样,永远不要使用那种方法。谢谢