我正在使用Starling中的AssetManager类加载大量纹理,大约600-700个png文件。启动时未加载所有文件,我使用多个AssetManagers来保存图像。在开始时,它将大约70个图像加载到3个不同的管理器,当它加载时,我在iOS上收到一些内存警告。
- iPhone appName [644]:收到内存警告。
- iPhone appName [644]:应用程序收到系统发出的内存警告。
- iPhone SpringBoard [74]:收到内存警告。
- iPhone MobilePhone [199]:收到内存警告。
我试图同时加载它们并尝试在另一个加载完成后启动每个加载。我也试过System.gc();和System.pauseForGCIfCollectionImminent(0.1);在每次加载之间,这解决了iPhone 5(7.0.4)上的问题,但没有解决iPhone 3gs(6.1.3)上的问题。
Starling版本:1.4.1
有人知道如何解决这个问题?
答案 0 :(得分:2)
您不应该加载600-700张图片。即使它们成功加载,您也会遇到很多性能问题。相反,请使用atlas / sprite表。
http://wiki.starling-framework.org/manual/textures_and_images
对于更优化的工作,请使用ATF Textures代替png。
答案 1 :(得分:2)
通常从移动开发的角度来看,从来没有“一刀切”的解决方案。有许多不同的屏幕尺寸和硬件配置。为了解决这个问题,许多开发人员将生成 - 如前所述, Sprite Sheets 。使用这种方法,应用程序只需加载一个图像,而在你的情况下加载数百个。图像加载器需要很长时间才能连接到内存地址以启动纹理上传到GPU - 我甚至无法想象它对于那么多资产的速度有多慢。
这个texture packer是惊人的,并且还有许多开发人员合并的另一个功能。资产密度。其中iPhone 3Gs开发人员将加载一组为较小屏幕尺寸开发的精灵表,一个大尺寸资产的两倍大的精灵表将为平板电脑或某些高端设备加载。此方法不仅可以解决您的内存问题,还可以使您的应用程序在更广泛的设备上看起来更好。
以下是multi-resolution development上Starling Wiki的链接。
您可以对项目进行的所有更改“为了更好”,上面提到的那些更改在列表中非常高。
答案 2 :(得分:0)
如果针对您的应用运行XCode Instruments,您将看到设备的总负载,这是确定接收内存警告频率的真实指标。
如果您的总负载%超过80%,则需要一系列恒定的内存警告。每次GC都会尝试运行,导致帧率急剧下降。
有一个关于这个的错误,Adobe正在研究它,但主要的解决方案是简单地使用更少的内存。缩小分辨率等设备的缩小纹理......