0

我在Starling中使用AssetManager类加载大量纹理,大约600-700 png文件。所有文件在启动时不加载,我使用多个AssetManagers来保存图像。开始时,它将大约70个图像加载到3个不同的管理器,并且在加载时我会在iOS上收到一些内存警告。Starling AS3:很多纹理,内存警告iOS

  • iPhone APPNAME [644]:接收到的存储器的警告。
  • iPhone appName [644]:应用程序收到来自系统的内存警告。
  • iPhone SpringBoard [74]:收到内存警告。
  • iPhone手机[199]:收到内存警告。

我试图在同一时间加载它们,并试图在另一完成时开始每个负载。我也试过System.gc();和System.pauseForGCIfCollectionImminent(0.1);在每个负载之间,这固定了iPhone 5(7.0.4)上的问题,但不是iPhone 3gs(6.1.3)上的问题。

八哥版本:1.4.1

任何人有关于如何解决这个任何提示?

回答

2

通常从移动发展的立足点从来就没有“一刀切”的解决方案。有许多不同的屏幕尺寸和硬件配置。为了解决这个问题,许多开发者会产生 - 如前所述,Sprite表。使用这种方法,应用程序只需要加载一个图像,在你的情况下,数百个。图像加载器需要很长时间才能连接到内存地址,以启动纹理上传到GPU - 我甚至无法想象,对于许多资产来说,它的速度必须很慢。

texture packer是惊人的,也有许多开发人员合并的另一个功能的助手。资产密度。在iPhone 3Gs中,开发人员将加载一组为小屏幕尺寸开发的精灵表,而具有两倍大小资产的较大精灵表则将加载平板电脑或某些高端设备。这种方法不仅能解决你的内存问题,还能让你的应用在更广泛的设备上看起来更好。

以下是关于multi-resolution development上的Starling Wiki的链接。

在“为了更好”而对项目所做的所有更改中,上面提到的更改都是非常高的。

+0

是的,谢谢你的帮助!我已经创建了精灵表,而且效果更好。我也重建了声音的加载。从一开始我就同时装载了所有的声音。但在需要之前加载它们会节省大量的内存。 – Erik

2

您不应该加载600-700张图片。即使它们加载成功,您在性能上也会遇到很多问题。相反,使用atlas/sprite表。

http://wiki.starling-framework.org/manual/textures_and_images

而对于更优化的工作,使用ATF纹理代替PNG文件。

http://wiki.starling-framework.org/manual/atf_textures

+0

是的,我已经想通了这一点,但现在我只用两个AssetMangagers,31个PNG图像测试,所有的图像具有2的幂内存警告仍在iPhone 3GS(6.1.3)上显示。 – Erik

+0

@Erik好吧,手机,尤其是旧手机的内存容量有限,可能会超出它。我建议你尝试ATF纹理,看看它如何去... – GeorgeCross

0

如果您针对您的应用运行XCode Instruments,则会看到设备的总负载,这是确定您多久收到一次内存警告的真实指标。

如果您的总负载百分比高于80%,预计存在大量不断的内存警告。 GC会尝试运行,每次都会导致帧速率的严重削波。

有一个关于这个和Adobe正在处理它的错误,但主要的解决方案是简单地使用较少的内存。低档次的纹理使其具有更低分辨率的设备,等等。

https://bugbase.adobe.com/index.cfm?event=bug&id=3649713