Flex: передавать данные из предварительного загрузчика в приложение? - PullRequest
0 голосов
/ 19 января 2010

Я бы хотел отследить опыт клиентов при загрузке и инициализации моего гибкого приложения.(а) Есть ли способ передать данные из предварительного загрузчика в приложение?Я хотел бы передать время, необходимое для загрузки и время, необходимое для инициализации.(b) Альтернативно: существует ли событие на уровне приложения, соответствующее событиям предварительного загрузчика: 1. Загрузка завершена 2. Инициализация завершена (аналогично Application creationComplete)

1 Ответ

1 голос
/ 19 января 2010

Статья "Отображение прогресса загрузки приложения" должна помочь.

Исходя из этой документации, я бы сделал что-то вроде этого:

  • создайте простой подкласс класса 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.
}
...