Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Зависает флешка при динамической загрузке данных (http://www.flasher.ru/forum/showthread.php?t=194499)

Maestro13 15.02.2013 18:19

Зависает флешка при динамической загрузке данных
 
С помощью URLLoader загружается в флешку zip архив. При весе зип архива около 30мб, флешка фризится на несколько секунд. Не понимаю почему это происходит, если по логике URLLoader загружает фоново и это не должно останавливать выполняемый поток приложения.

В зип архиве содержатся различные xml и текстурные атласы, которые потом декодируются и из них формируется графика для молехила - суть в том, что эти данные должны отображаться по мере загрузки, а в итоге получается, что флешка ждет эту загрузку замораживая выполнение основного потока

in4core 15.02.2013 21:45

Флеш это низкоуровневый язык, тут понятия как поток вообще не существует. Потоками управляет сам процессор так как хочет ( считает нужным ). Ваша проблема редка, обычно (99%) пользователи не натыкаются на эту проблему, но вы ее как раз поймали ) Поздравляю ) Эх JAVA , тебя нам не хваталА)

caseyryan 15.02.2013 22:18

Цитата:

Флеш это низкоуровневый язык
Низкоуровневый язык - это ассемблер. АС3 - это язык высокого уровня.
Цитата:

если по логике URLLoader загружает фоново и это не должно останавливать выполняемый поток приложения.
Это проблему можно решить передав обработку архива другому "потоку", точнее другому экземпляру флеш плеера, через Worker, а после обработки забрать уже готовые данные.

in4core 15.02.2013 22:32

caseyryan тьфу описка вышла. А по поводу потоков это бесспорно , их нет.
Почитал про воркер - полная фигня. Очередной псевдо поток, недоязык

http://bitsofinfo.wordpress.com/2008...-actionscript/ вот псевдопоточная система.

Maestro13 16.02.2013 14:47

in4core - спасибо за ссылку , буду юзать. Только все равно понять не могу, есть же куча приложений, где графика подгружается в процессе выполнения приложения, и при этом ничего не фризится.

вот код такой:
Код AS3:

var loader:URLLoader=new URLLoader()
loader.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
loader.addEventListener(ProgressEvent.PROGRESS, progressHandler);
loader.addEventListener(Event.COMPLETE, libLoadComplete);
loader.load(new URLRequest(newLib.path + RES_EXT+ "?nocache=" + Preloader.VERSION));


iNils 16.02.2013 15:23

А вы уверены, что фриз происходит во время загрузки, а не во время распаковки этих 30 мб?
Сколько процентов успевает показать progressHandler перед тем, как происходит фриз?

Maestro13 16.02.2013 17:35

progressHandler показывает примерно 15,30,45,60,75,90%? после чего флешка продолжает работать
Цитата:

А вы уверены, что фриз происходит во время загрузки, а не во время распаковки этих 30 мб?
Распаковку архива я отключил даже, без нее фриз не 10 секунд, а секунды 2, но никуда не пропадает.
Я даже ентерфрейм затрейсил. Логи примерно такие:
enter_frame
enter_frame
progress 15%
progress 30%
progress 45%
progress 60%
progress 75%
progress 90%
loadComplete
enter_frame
enter_frame

iflamberg 16.02.2013 17:49

Неверю. Пойду сделаю тест.

caseyryan 16.02.2013 17:56

Цитата:

Сообщение от in4core (Сообщение 1120812)
caseyryan тьфу описка вышла. А по поводу потоков это бесспорно , их нет.
Почитал про воркер - полная фигня. Очередной псевдо поток, недоязык

Совсем не фигня. Не полноценная многопоточность как в других языках, но и псевдо я бы ту систему не назвал. Распаковка архива в фоне, это как раз то, что можно смело доверить воркеру.

Цитата:

Распаковку архива я отключил даже, без нее фриз не 10 секунд, а секунды 2, но никуда не пропадает.
Это нормальное явление.

iNils 16.02.2013 19:36

Цитата:

Сообщение от Maestro13 (Сообщение 1120893)
progressHandler показывает примерно 15,30,45,60,75,90%? после чего флешка продолжает работать

Распаковку архива я отключил даже, без нее фриз не 10 секунд, а секунды 2, но никуда не пропадает.
Я даже ентерфрейм затрейсил. Логи примерно такие:
enter_frame
enter_frame
progress 15%
progress 30%
progress 45%
progress 60%
progress 75%
progress 90%
loadComplete
enter_frame
enter_frame

Читаем в справке про событие complete
Цитата:

complete - Отправляется после декодирования всех полученных данных и размещения их в свойстве data объекта URLLoader.
Видимо эти 2 секунды фриза уходят на декодировку и размещение этих 30 мб.

А с распаковкой... Флеш не успел вывести данные о "loadComplete" после "progress 90%", тк см. выше + сразу начал распаковывать архив, отсюда и фриз с ощущением, что он начался распаковывать еще при загрузке.

Maestro13 22.02.2013 13:07

Всем спасибо за ответы, стало все понятно. В конечном счете попытался реализовать раскрытие архива через Worker. Возникла проблема, описал здесь


Часовой пояс GMT +4, время: 01:10.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.