原来flash player对图片的解码不是异步的,AIR2.6后就异步了

来源:互联网 发布:mac不能联网怎么重装 编辑:程序博客网 时间:2024/04/29 03:06

用过 Loader 对象的人都知道,加载图片时,无论是使用 load() 方法还是 loadBytes() 方法,都是异步的。从开始加载到显示在舞台上这一过程,分别有两个动作:图片加载和图片解码。我一直都以为,从加载到解码完毕都是异步进行。但看了这篇文章后(http://www.bytearray.org/?p=2931),我才知道,只有加载的动作是异步的,加载完毕后的图片解码是同步的。即:加载动作是另开线程处理的,但加载完毕后的解码操作是交给主线程处理的。那就是说,加载大图片的话,会很糟糕。

Adobe AIR 2.6 版本里新增了API:LoaderContext.imageDecodingPolicy 属性。用于指定图片的解码操作是同步的还是异步的,即:是在主线程里解码,还是另开线程解码。

添加这个功能后,实在让人叫好。但,我觉得还不够完美。图片加载完毕后,flash player 就自动对图片进行解码。如果把这两个过程分开,让开发者决定什么时候进行解码,那才让人连声叫好。为什么要这样做呢?因为:图片解码后更占用内存!有时候,我们只想把图片预加载进来,但并不会马上把图片展示出来。举个例子:一张 4KB 的图片,以二进制的形式加载到flash里,仅占用内存为 4KB 。但在解码后,可能占用了 10KB 的内存(这个跟图片压缩率有关)。为做到仅使用时才对图片进行解码的效果(这样能有效利用内存资源),目前的做法是先使用 URLLoader 把图片以二进制的形式加载进来,直到需要展示图片时,才用 Loader.loadBytes() 加载。

原创粉丝点击