位图图像的异步解码Flash Player 10.2 和更高版本,Adobe AIR 2.6 和更高版本 使用位图图像时,可以异步解码和加载位图图像,以改善应用程序的感知性能。在许多情况下,异步解码位图图像所需的时间可能和同步解码图像相同。但是,在关联的 Loader 对象发送 COMPLETE 事件之前,位图图像会在单独的线程中进行解码。因此,您可以在加载较大的图像后,对其进行异步解码。 借助 flash.system 包中的 ImageDecodingPolicy 类,您可以指定位图加载方案。默认加载方案为异步。
注: 如果加载的文件是位图图像,并且使用的解码策略为 ON_LOAD,则该图像将在 COMPLETE 事件调度之前进行异步解码。
以下代码显示了 ImageDecodingPolicy 类的用法: 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); 您仍然可以通过 Loader.load() 和 Loader.loadBytes() 方法使用 ON_DEMAND 解码。但是,所有其他使用 LoaderContext 对象作为参数的方法,将忽略传递的任何 ImageDecodingPolicy 值。 下面的示例显示了同步和异步解码位图图像的差异: package { import flash.display.Loader; import flash.display.Sprite; import flash.events.Event; import flash.net.URLRequest; import flash.system.ImageDecodingPolicy; import flash.system.LoaderContext; public class AsyncTest extends Sprite { private var loaderContext:LoaderContext; private var loader:Loader; private var urlRequest:URLRequest; public function AsyncTest() { //Load the image synchronously loaderContext = new LoaderContext(); //Default behavior. loaderContext.imageDecodingPolicy = ImageDecodingPolicy.ON_DEMAND; loader = new Loader(); loadImageSync(); //Load the image asynchronously loaderContext = new LoaderContext(); loaderContext.imageDecodingPolicy = ImageDecodingPolicy.ON_LOAD; loader = new Loader(); loadImageASync(); } private function loadImageASync():void{ trace("Loading image asynchronously..."); urlRequest = new URLRequest("http://www.adobe.com/myimage.png"); urlRequest.useCache = false; loader.load(urlRequest, loaderContext); loader.contentLoaderInfo.addEventListener (Event.COMPLETE, onAsyncLoadComplete); } private function onAsyncLoadComplete(event:Event):void{ trace("Async. Image Load Complete"); } private function loadImageSync():void{ trace("Loading image synchronously..."); urlRequest = new URLRequest("http://www.adobe.com/myimage.png"); urlRequest.useCache = false; loader.load(urlRequest, loaderContext); loader.contentLoaderInfo.addEventListener (Event.COMPLETE, onSyncLoadComplete); } private function onSyncLoadComplete(event:Event):void{ trace("Sync. Image Load Complete"); } } } |
|