LoaderQueue:带优先级的加载队列

LoaderQueue是一款针对Flash项目的加载队列工具,支持优先级控制、连接池管理、缓存管理和进度监控等功能,适用于游戏和其他需要加载大量资源的应用。

LoaderQueue:带优先级的加载队列

在Flash项目中,我们一般都需要加载外部文件:共享库,XML,图片,音乐等等。在多数情况下,我们都希望能够控制这些加载的文件的先后顺序。如在Flash游戏中,我们希望用户先看到地图,然后是可视范围内的人物。有的时候,我们希望先加载XML,能暂停那些不重要的加载(地图缓存数据),先处理数据发送。

为了解决以上提到的功能需要,我和我的同事Austin一起着手写一个更好用的加载队列。我们暂时取名为:LoaderQueue。在一开始,我们就希望它能支持优先级,多进程和更易用。

OK,看看它有哪些特色:

1. 基于接口,方便扩展易于学习
image

LoaderQueue提供两个接口:ILoaderQueue用于定义对外的一致接口,主要负责添加和删除不同的ILoaderAdapter,该接口目前有唯一的实现:LoaderQueue。
ILoaderAdapter定义一个一致的接口用于实现不同类型文件的加载,目前内置的有Loader、URLLoader、Sound和URLStream也可以根据项目需要添加更多。

基本用法:

//实例化LoaderQueue,2进程, 延迟100毫秒
loaderQueue = new LoaderQueue(2, 100, true);

//添加一个图片加载
var pic1:LoaderAdapter =
    new LoaderAdapter(1, new URLRequest("images/pic1.jpg"));

//添加一个图片加载
var pic2:LoaderAdapter =
    new LoaderAdapter(1, new URLRequest("images/pic2.jpg"));

loaderQueue.addItem(pic1);
loaderQueue.addItem(pic2);

2. 优先级控制
image

从上图可以看出,LoaderQueue加载顺序是从优先级高的开始加载,在加载过程中,如果有优先级高的加载插入,会暂停优先级较低的加载,先加载高的对象。

3. 连接池
ILoaderQueue.threadLimit 属性用于控制同时可加载的对象数目。你可以在构造函数中指定,也可以在在加载过程中调整。

4. 缓存管理
如果一个文件已经加载过(缓存在浏览器中),事实上再次加载是不需要花费多少时间的,如果再次加入队列,它有可能需要排队(如果优先级低的话),这无形浪费了很多时间,用户体验也不好,此时,设置 loaderQueue.jumpQueueIfCached = true,可以开启该功能。该参数默认为true。

支持禁用缓存,设置LoaderAdptaer.preventCache = true;即可禁用缓存。

5. 支持对单个或多个文件加载进度及情况进行监控
LoaderQueue只提供单个文件是事件调度,当需要处理一批文件的加载进度时,我们需要使用LoaderProgress对象。示例如下:

//实例化LoaderQueue,2进程, 延迟100毫秒
loaderQueue = new LoaderQueue(2, 100, true);

//实例化一个LoaderProgress
var loaderProgress:LoaderProgress = new LoaderProgress();
//监听进度事件
loaderProgress.addEventListener(Event.CHANGE,
    function(event:Event):void
    {
        trace(loaderProgress.totalProgress);
    });

//添加一个图片加载
var pic1:LoaderAdapter =
    new LoaderAdapter(1, new URLRequest("images/pic1.jpg"));

//添加一个图片加载
var pic2:LoaderAdapter =
    new LoaderAdapter(1, new URLRequest("images/pic2.jpg"));

loaderProgress.addItem(pic1);
loaderQueue.addItem(pic1);
loaderProgress.addItem(pic2);
loaderQueue.addItem(pic2);

//开始对进度监听
loaderProgress.start();

//停止对进度监听
//loaderProgress.start();

6. 非索引式获取一个加载对象,而是直接获得加载对象实例
从上面的例子可以看到,创建一个ILoaderAdapter实例时,LoaderQueue并不保存对该实例获取的索引,因此,实例化ILoaderAdapter的对象必须自己保持ILoaderAdapter的指针。这样的好处是实例创建者才可以获得ILoaderAdapter实例,而不是任何对象都可以通过一个String名称就可以得到。

7.失败重连
maxTries参数可以设置当加载失败时重试次数,默认为3次。

该功能已经在一个社交网站中用到,效果很不错。我会增加这个工具。有兴趣的朋友可以看看。:)

源代码地址:https://github.com/wersling/LoaderQueue

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值