Flex:将数据从预加载器传递到应用程序?

时间:2010-01-19 00:40:21

标签: flex events preloader

我想跟踪下载和初始化我的Flex应用程序的客户体验。 (a)有没有办法将数据从预加载器传递给应用程序?我想通过下载所需的时间和初始化所需的时间。 (B)可替代地: 应用程序级别是否存在与预加载器事件对应的事件: 1.下载完成 2.初始化完成(与Application creationComplete相同)

1 个答案:

答案 0 :(得分:1)

liveocs中的"Showing the download progress of an application"文章应该有所帮助。

基于该文档,我会做这样的事情:

  • 创建DownloadProgressBar的简单子类
  • 覆盖事件侦听器以跟踪下载/初始化期间已经过的时间,
  • 将时间值存储为静态属性,以便在完成初始化后可以从应用程序中访问它们。

这是我正在思考的一个例子(我没有编译这段代码,更多的是要了解我在说什么)。

package
{
public class TimedProgressBar extends mx.preloaders.DownloadProgressBar
{
    public static var startTime:Number = 0;
    public static var downloadCompleteTime:Number = 0;
    public static var RSLCompleteTime:Number = 0;

    public function TimedProgressBar() 
    {
        super();
        startTime = getTimer();
    }

    override protected function completeHandler(event:Event):void
    {
        super();
        downloadCompleteTime = getTimer();
    }

    override protected function rslCompleteHandler(event:RSLEvent):void
    {
        super();
        RSLCompleteTime = getTimer();
    }
}
}

将其设置为Application.mxml中的预加载器并侦听APPLICATION_COMPLETE事件:

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" 
    preloader="TimedProgressBar"
    applicationComplete="applicationCompleteHandler(event)">


private function applicationCompleteHandler(event:FlexEvent):void
{
    var completeTime:Number = getTimer();

    var downloadTime:Number = TimedProgressBar.downloadCompleteTime - TimedProgressBar.startTime;
    var rslDownloadTime:Number = TimedProgressBar.RSLCompleteTime - TimedProgressBar.downloadCompleteTime;
    var totalInitTime:Number = completeTime - TimedProgressBar.startTime;

    // Do whatever logging you want with this information.
}