2010-01-19 123 views
0

我想跟蹤下載和初始化我的Flex應用程序的客戶體驗。 (a)是否有將數據從預加載器傳遞到應用程序的方法?我想通過下載所需的時間和初始化所需的時間。 (B)另外: 有沒有在對應於預加載事件的應用程序級別的事件: 1.下載完整 2.初始化完成(同應用creationComplete)Flex:將數據從preloader傳遞到應用程序?

回答

1

"Showing the download progress of an application"文章中的LiveDocs中應該幫助。

基於文檔的,我會做這樣的事情:

  • 創建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. 
} 
+0

這是一個很好的例子。應用程序可以從預加載器中獲取數據,但不希望以其他方式進行,並嘗試將數據從預加載器推送到應用程序的任何部分(這可能會無意中在預加載器中加載更多應用程序)。 – 2010-01-22 03:15:26

相關問題