Форум 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=181849)

olexandr 04.07.2012 11:33

Полный сброс приложения, реинициализация
 
Привет.

Даже не знаю, как задать правильно вопрос. Понимаю, что это похоже на бред, но тем не менее...
Есть ли способ полностью закончить работу приложения, очистить память и запустить его заново в пределах одной сессии запуска?

Подробнее. Я разрабатывал плеер. В нем есть некоторые глобальные объекты, которые создаются один раз для всего приложения, типа самого плеера, панели контролов, плагинов, иконок разных интерактивных, статистика.
Сейчас возникла необходимость добавить функционал, как в ютубе, чтобы по клику на одной и ссылок все старое убивалось и подгружались заново файл с данными, иконки, плагины,.

Если просто удалить все из поля видимости и проапгрейдить нужные данные, то будут утечки памяти.
Соответственно, я вижу два выхода:
1. Сделать какой-то сброс и очистить память (но ведь System.gc и известный прием с двумя LocalConnection работает только в дебаг-версии?)
2. Перебирать все классы (их там штук 30-40) и во всех писать методы reset - но ведь это адский труд, да и не факт, что удасться все учесть.

Создать новый экземпляр приложения, кстати, не проблема. Проблема в том, как правильно удалить все старое.
Какие вы видите решения проблемы с наименьшими трудозатратами? Возможно хотя бы идеи по правильной архитектуре.

p.s. Я на 2 дня сейчас уезжаю. Отвечать, если что, пока не смогу.

-De- 04.07.2012 12:08

Может, перегрузить страничку? Или там, не знаю, слой в хтмле с флэшкой.

caseyryan 04.07.2012 12:49

Цитата:

2. Перебирать все классы (их там штук 30-40) и во всех писать методы reset - но ведь это адский труд, да и не факт, что удасться все учесть.
Это нужно делать сразу же при написании классов, а не когда уже все готово. Добавляется слушатель? Тут же добавить в деструкторе уго удаление. Затратить изначально чуть больше времени, зато потом избавить себя от кучи проблем. А сейчас единственный рабочий вариант уже предложил -De-

Aquahawk 04.07.2012 12:54

40 классов совсем не много, так что за денёк перепишете.

tofflife 04.07.2012 14:22

40 классов? Действительно, это я бы сказал, мало. А вот когда их около 8 тысяч, вот тут уже беда =)

strangedk 04.07.2012 14:33

Если уж на то пошло, то можно использовать интерфейс например IResetable и подключать его к классам в которых может понадобиться такая реинициализация.

Далее добавить функцию resetHandler в слушатель события от синглтона, например ApplicationEvent.RESET, и в итоге для того чтобы все классы "перезагрузились" вам в одном месте программы достаточно будет сделать
Код AS3:

_facade.dispatchEvent(new ApplicationEvent(ApplicationEvent.RESET));


olexandr 05.07.2012 23:30

Всем спасибо за ответы. В общем-то, похожей картины и ожидал.
Банальный совет "сразу отписываться от всех слушателей" я знаю и применяю, только кто-ж знал, что понадобится такая функция :)
Окей, буду мучаться. Еще раз спасибо.


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

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