AS3异步位图创建iOS

时间:2013-06-26 19:08:49

标签: ios actionscript-3 air

我正在使用Adobe Air开发iPad应用程序。

应用启动时,我将所有图片都加载到BitmapData个对象中。然后我只需要创建Bitmap个对象(只是容器)来使用存储在BitmapData个对象中的像素。

这个工作正常,直到我必须用一个大图像创建一个Bitmap对象。该应用程序减速,甚至冻结,持续时间长达1秒。

由于AS3是单线程的,我无法将Bitmap创建委托给新线程。此外,如果UI被冻结,我无法显示一个体面的微调器来通知用户“正在发生的事情”。

我怎么能解决这个问题? 有没有办法在不影响UI性能的情况下并行创建对象?

2 个答案:

答案 0 :(得分:1)

你可以使用worker,它基本上是as3的后台主题,在这里阅读ASDocs Worker

答案 1 :(得分:0)

好吧,似乎答案简单得多,Adobe已经想到了这一点。

http://help.adobe.com/en_US/as3/dev/WS52621785137562065a8e668112d98c8c4df-8000.html

问题在于,即使将图像加载到BitmapData个对象中,它们也不会被解码。这就是为什么更大的图像需要花费一些时间才能放入Bitmap个对象。

解决方案就像在加载图像时使用强制图像解码的指令一样简单,而不是在需要时解决。这是使用ImageDecodingPolicy.ON_LOAD完成的。

var loaderContext:LoaderContext = new LoaderContext(); 
loaderContext.imageDecodingPolicy = ImageDecodingPolicy.ON_LOAD; 
var loader:Loader = new Loader(); 
loader.load(new URLRequest("http://www.adobe.com/myimage.png"), loaderContext);