我正在使用Adobe Air开发一个iPad应用程序。
当应用程序启动时,我会将所有图像加载到BitmapData对象中。然后,我只需要创建Bitmap对象(它们只是容器)来使用存储在BitmapData对象中的像素。
在我必须创建一个带有大图像的Bitmap对象之前,这个方法工作得很好。应用程序会变慢,甚至冻结,长达1秒之久。
因为AS3是单线程的,所以我不能将创建Bitmap的任务委托给新的线程。另外,如果UI被冻结,我不能显示一个像样的微调器来通知用户“正在发生的事情”。
我该如何解决这个问题呢?有没有办法在不影响UI性能的情况下并行创建对象?
发布于 2013-06-27 04:27:04
看起来答案要简单得多,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);发布于 2013-06-27 03:13:15
您可以使用worker,它基本上是as3的后台线程,请在这里阅读ASDocs Worker
https://stackoverflow.com/questions/17328494
复制相似问题