目前我正在开发适用于iOS和Android的Air应用。 Air 3.5是目标。 经过大量优化后,iPhone 4 / 4s的性能总体上是可以接受的:gpu渲染,StageQuality.LOW,尽可能地避免向量等等。我真的付出了很多努力来提升性能。
但是,每隔一段时间,该应用程序变得非常缓慢。在此之后没有精确的时间点或动作或动作组合。有时,它不会发生数天。但是当它发生时,只杀死应用程序并再次启动它有帮助,因为应用程序在此之后保持缓慢。所以我不是在谈论轻微的打嗝 问题仅发生在(某些)iPhone 4和4上。不适用于iPad 3,4,iPhone 5,任何Android设备......
是否有人有类似的经验和指针可以找到解决方案? 当gpu内存填满时会发生什么?还是设备内存?这可能涉及吗?
答案 0 :(得分:1)
请不要指望Adobe Air具有Native Apps的性能。我正在使用Adobe Air开发App。
通过您的开发经验的声音。我认为这与内存问题有关,因为在乞讨阶段性能不是太糟糕,但加时不好(所以你必须杀掉应用程序)。我建议你研究内存泄漏问题。
答案 1 :(得分:0)
希望我的经验可以帮到你。
我遇到了类似的问题,在游戏过程中,帧速率会从30fps下降到不可恢复的12fps。起初我以为我的GPU内存耗尽,而且它正在重新使用CPU渲染。
使用Adobe Scout我发现当发生这种情况时,渲染时间很荒谬。
更新到Air 3.8,我通过限制一次渲染和内存中的位图数量来解决问题。我只会为适当的级别创建新的背景实例,然后在级别结束时标记它们以进行垃圾收集,等待几秒钟然后再移动到下一级别。
可以解决您的问题的方法是,如果您一次减少内存中的纹理数量,只显示您需要的纹理数量。如果要将活动纹理替换为新纹理,请将具有该纹理数据的所有对象设置为null:
testMovieClip = null;
并从中删除所有侦听器,以便垃圾收集将其拾取。 接下来,您可以使用AIR强制进行垃圾回收:
System.gc();
在调用gc后实例化要渲染几帧的新纹理。使用Scout和iOS配套应用程序监控资源,以确认它是否正常工作。
您还可以尝试检测帧速率何时下降,并将某些对象设置为null然后强制进行垃圾回收。在我的情况下,如果我使用垃圾收集将游戏移动到空帧几秒钟,帧速率将恢复,游戏将恢复使用GPU渲染。
希望这有帮助!