用flex做的项目往往会把sdk设为RSL(运行时共享库)的方式加载,因为这样可以减小文件体积,缩短加载的时间。
但是会碰到另外一个问题,加载SDK需要很长时间,并且flex没有提供sdk加载进度的方法。这样就会造成程序写加载
进度条的时候不能把加载SDK的进度也算进去,造成加载进度不准确,程序已经加载完了,但是还需要等待sdk加载完
才能进入主界面,会导致部分用户流失。
由于这个问题对项目影响较大,所以必须找到解决办法。于是这段时间我对这个问题做了深入的研究。
其实也不算怎么深入了,就是对flex开始loading到初始化的这段过程分析下。
有一个不争的事实我们必须知道,下面是Adobe帮助文档的原话:
“SystemManager 是在应用程序中创建的第一个显示类。它负责创建要显示的 mx.preloaders.Preloader 以及应用程序完成加载时显示的 mx.preloaders.SparkDownloadProgressBar,然后创建 mx.core.Application 实例。”
所以我们必须从SystemManager入手,还好flex是开源的,提供SystemManager的源码。
打开SystemManager类:
在构造函数里我们可以发现root.loaderInfo.addEventListener(Event.INIT, initHandler);,说明监听了loaderInfo的init事件;
在initHandler里面我们可以找到initialize();,说明在这里进行了初始化;
在initialize里面我们可以找到preloader = new Preloader();,说明开始创建Preloader对象,终于知道Preloader在哪初始化了。
打开Preloader类:
可以找到mx_internal function rslProgressHandler(event:ProgressEvent):void和mx_internal function rslCompleteHandler(event:Event):void
这两个就是RSL的progress和complete事件,然后我们发现这两个函数里面都有dispatchEvent(rslEvent); 这句话。说明这两个事件是可以被Preloader
的实例接收到的,这样的话,我们只要找到了preloader的实例就可以监听到RSL的加载进度和加载完成事件了。
回到SystemManager类:
我们已经知道preloader在哪初始化了,下面只要在Loader的时候能访问到preloader就大功告成了。
在initialize里面我们可以找到_popUpChildren.addChild(preloader);,说明在popUpChildren里面可以找到preloader。
我们知道SystemManager有popUpChildren的get方法。说明popUpChildren是可以获取到的,这样我们顺藤摸瓜已经找到解决办法了。
最后在加上一句SystemManager怎么获取呢?  很简单当swf被Loader加载的时候,Loader的content属性就是个SystemManager对象。
下面附上我写的一段代码,以备需要的时候直接过来取:
            var loaderA:Loader;
            loaderA.load(new URLRequest("A.swf"), null);
            
            loaderA.contentLoaderInfo.addEventListener(Event.INIT, onInit);
            loaderA.contentLoaderInfo.addEventListener(Event.COMPLETE, onSwfLoaded);
            
            function onInit(e:Event):void{
                loaderA.contentLoaderInfo.removeEventListener(Event.INIT, onInit);
                loaderA.content.addEventListener(Event.ENTER_FRAME, onEnterFrame);
            }
            
            function onEnterFrame(e:Event):void{
                if(loaderA.content["popUpChildren"]["numChildren"]>=1){
                    var preloader:Object = loaderA.content["popUpChildren"]["getChildAt"](0);
                    loaderA.content.removeEventListener(Event.ENTER_FRAME, onEnterFrame);
                    
                    preloader.addEventListener("rslProgress",onLoadingAndLoaded);
                    preloader.addEventListener("rslComplete",onLoadingAndLoaded);
                }
            }
            
            function onLoadingAndLoaded(e:Event):void{
                var per:Number = e["bytesLoaded"]/e["bytesTotal"];
                var per2:Number = e["rslIndex"]/e["rslTotal"];
                
                var percent:Number = per/e["rslTotal"]+per2;
                trace(percent);
            }
完!

转载于:https://www.cnblogs.com/huomiao/archive/2012/12/10/2811368.html

获取Flex SDK加载进度的方法相关推荐

  1. android 标题栏进度圈使用方法,Android 自定义标题栏 显示网页加载进度的方法实例...

    这阵子在做Lephone的适配,测试组提交一个bug:标题栏的文字较长时没有显示完全,其实这并不能算个bug,并且这个问题在以前其他机器也没有出现,只是说在Lephone的这个平台上显示得不怎么美观, ...

  2. 小米视频加载进度条效果实现

    原文:小米视频加载进度条效果实现 好吧,其实这些都是我闲暇时自己做着玩的,以前总是拿来主义,现在分享一下让我也为大家做一点贡献好了.废话不说了,看效果. 好吧 其实没什么技术含量 直接上代码好了 和我 ...

  3. android游戏加载,Android 游戏引擎libgdx 资源加载进度百分比显示案例分析

    因为案例比较简单,所以简单用AndroidApplication -> Game -> Stage 搭建框架 一.主入口,无特殊 public class App extends Andr ...

  4. android webview 加载进度和自定义404错误页面

    原帖地址:http://www.cnblogs.com/winxiang/archive/2012/10/25/2738320.html 自定义404页面.android的webview 控件可以加载 ...

  5. android 加载条封装,Android基于JsBridge封装的高效带加载进度的WebView

    图片发自简书App 概述 从去年4月项目就一直用起了JsBridge,前面也针对jsBridge使用姿势介绍过一篇入门篇,<Android JsBridge实战 打造专属你的Hybrid APP ...

  6. 浅谈前端实现页面加载进度条以及 nprogress.js 的实现

    以前在 Vue 的项目用了 nprogress 这个插件,一直对于其如何得知加载进度充满好奇,最近又看到了「前端如何实现页面加载进度条」这个问题,今天周六恰好一探究竟.以下仅为一家之言,如有异议,欢迎 ...

  7. php+页面加载进度,基于jQuery实现模拟页面加载进度条_jquery

    因为我们无法通过任何方法获取整个页面的大小和当前加载了多少,所以想制作一个加载进度条的唯一办法就是模拟.那要怎么模拟呢? 我们知道,页面是从上往下执行的,也就是说我们可以大致估算出在页面的某个位置加载 ...

  8. GameFrameWork框架(Unity3D)使用笔记(八) 实现场景加载进度条

    前言: 游戏在转换场景的时候,需要花费时间来加载相关的资源.而这个过程往往因为游戏场景的规模和复杂度以及玩家电脑配置的原因花费一小段时间(虽然这个项目里用不到). 所以,如果这一小段时间,画面就卡在这 ...

  9. jquery ajax加载页面进度条,基于jQuery实现模拟页面加载进度条

    因为我们无法通过任何方法获取整个页面的大小和当前加载了多少,所以想制作一个加载进度条的唯一办法就是模拟.那要怎么模拟呢? 我们知道,页面是从上往下执行的,也就是说我们可以大致估算出在页面的某个位置加载 ...

最新文章

  1. php7 curl_init(),php7.3-curl_init获取301、302跳转后的数据
  2. jvm两种方式获取对象所占用的内存
  3. linnux 流量控制模块tc_可编程控制器PLC基本工作原理(第一颗)
  4. 用MSMTP+MUTT搭建日志邮件发送系统
  5. 三星s6 android 5.1.1,谷歌亲儿子们痛哭:三星S6都升级安卓5.1.1了!
  6. 生产者消费者的实际使用
  7. Linux管理文件和目录
  8. Python扩展库scipy中值滤波算法的应用
  9. Java ==和equals有什么区别?
  10. HarmonyOS Sans - 华为把鸿蒙系统自带的字体开放给全社会免费商用了
  11. 费率转换成利率的计算器_存款利率计算器
  12. python2.0迅雷下载_【Tomato DualWan】迅雷离线下载完美教程
  13. 2015-nature-deep learning-LeCun, Bengio and Hinton
  14. 2017年11月软考全国各省市报名时间及报名网址(动态更新)
  15. 打造认可文化,是OKR成功的关键
  16. PhpSpreadsheet 基本使用和导入 导出 模版生成Excel文件
  17. 爸爸,我们一起把这本书讲给更多人吧!
  18. win10安装oracle11g
  19. Java语言是 解释执行 的语言吗
  20. 最简单的树上染色问题(没有之一)

热门文章

  1. Visual Studio Code C++配置文件
  2. LeetCode 453. 最小移动次数使数组元素相等(数学)
  3. LeetCode 1042. 不邻接植花(图的数据结构)
  4. python中的面向对象:类与对象(重点!!!)
  5. php获取当前世界,php获取网站alexa世界流量排名代码
  6. 数据分析-书籍整理(三)
  7. Power BI 将商业智能数据转换为数据理解
  8. COS系统的前端演变和发展
  9. 阿里P8架构师谈:Dubbo的详细介绍、设计思路、以及4大适用场景
  10. 论文浅尝 | 利用 KG Embedding 进行问题回答