我正在使用Adobe Air开发iPad应用程序。
应用启动时,我将所有图片都加载到BitmapData
个对象中。然后我只需要创建Bitmap
个对象(只是容器)来使用存储在BitmapData
个对象中的像素。
这个工作正常,直到我必须用一个大图像创建一个Bitmap
对象。该应用程序减速,甚至冻结,持续时间长达1秒。
由于AS3是单线程的,我无法将Bitmap
创建委托给新线程。此外,如果UI被冻结,我无法显示一个体面的微调器来通知用户“正在发生的事情”。
我怎么能解决这个问题? 有没有办法在不影响UI性能的情况下并行创建对象?
答案 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);