actionscript-3 - 位图被缓存为位图

标签 actionscript-3 air

我正在开发 AIR Mobile for iOS 的幻灯片类型部分。用户可以滚动浏览四个页面。每个页面都包含一个使用 Bitmap 类加载的 PNG(即使压缩后也有 1MB 大)和两个 TextField。当我滚动它们时(使用自定义滚动框架,在整个应用程序中不会出现任何问题),应用程序将每个 PNG 图像缓存为位图,当它们进入屏幕时,并在它们离开屏幕时卸载它们。周期(很可能是下一次 GC,尽管它似乎不如 GC 随机)。

在 iOS 上缓存 PNG 的行为非常慢,尤其是当它在另一个操作(例如滚动)发生时发生。这会在滚动时产生约 1 秒的延迟,这显然是 Not Acceptable 。有没有办法a)阻止缓存或b)让它们缓存更长时间/无限期直到图像本身符合GC条件?

我已经三重检查了我的代码,没有设置任何内容到cacheAsBitmap。此外,我一直在使用 Adob​​e Scout 来查明导致短暂卡住的原因,这肯定是由于缓存图像造成的。我还消除了任何变换、缩放、过滤器或任何可能打开 cacheAsBitmap 的操作,并且结果保持不变。

最佳答案

事实证明,位图缓存并不是真正的问题。经过多次检查,我发现这实际上是PNG解压。基本上,Flash 在 PNG 出现在屏幕上时对其进行解压缩(这比缓存更昂贵),将它们添加到内存中,并在它们离开屏幕一段时间后撤消该过程,这意味着我必须解压缩每张图像都在这段时间之后重新开始。

要解决此问题,您只需以某种方式访问​​ BitmapData 对象即可。我在构造函数中使用了 getPixel( 0, 0 ) ,图像被解压缩并永久加载到 BitmapData 中。它会增加一些启动时间,但以这种方式预加载会带来更好的性能。

关于actionscript-3 - 位图被缓存为位图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16072647/

相关文章:

javascript - Adobe Air 和 Canvas 无法工作

air - 如何使 AIR NativeWindow 始终位于应用程序前面,而不是其他窗口前面?

actionscript-3 - 错误#1056 : Cannot create property *** on ***

apache-flex - 如何根据多列对 flex 数据网格进行排序?

flash - Actionscript 3 : How can I get the symbol name, 而不是实例名称

iphone - box2d 和 Starling - body 没有正确碰撞

apache-flex - 更改 Flex 中多个对象的属性

ios - Air to iPad Release Build Assets 加载失败

actionscript-3 - AIR AS3 投影仪的奇怪错误

ios - 跨版本使用 File.applicationStorageDirectory