Что до сем. Так что это не вопрос о схемах управления памятью; для тех из вас, кто может не знать, виртуальная машина Flash использует сборку мусора с помощью подсчета ссылок, а также отметки и очистки (для хорошего освещения этих тем ознакомьтесь с статьей и презентации Гранта Скиннера) 1004 *). И да, Flash также предоставляет оператор «delete», который (к сожалению, только) можно использовать для удаления свойств динамических объектов.
Что я хочу знать, так это как сделать так, чтобы программы Flash не продолжали использовать процессор и память при работе в фоновом режиме (например, сохранять загрузку содержимого или осуществлять удаленный обмен данными). Мотивация для этого вопроса частично объясняется запретом Apple на кросс-скомпилированные приложения (в его SDK 4) на том основании, что они не ведут себя так, как предсказывалось с функцией многозадачности , которая является центральной для iPhone OS 4. Я намерен не только для создания Flash-программ, которые будут «проходить проверку», насколько многозадачность в iPhone OS 4, но также и для создания более качественных Flash-программ.
Другими словами, как приложение Flash может имитировать функцию многозадачности iPhone OS 4? Предоставляет ли Flash API разработчику возможность переводить свои приложения в спящий режим во время работы других программ, а затем так же быстро «пробуждать» их?
В нашей собственной программе мы могли бы сделать что-то столь же грубое, как обнаружение, когда пользователь бездействовал (без движения мыши или нажатия клавиши) в течение, скажем, четырех секунд:
var idle_id:uint = setInterval(4000, pause_program);
var current_movie_clip:MovieClip;
var current_frame:uint;
...
// on Mouse move or key press...
clearInterval(idle_id);
idle_id = setInterval(4000, pause_program);
...
function pause_program():void
{
current_movie_clip = event.target as MovieClip;
current_frame = current_movie_clip.currentFrame;
MovieClip(root).gotoAndStop("program_pause_screen");
}
(на экране паузы программы)
resume_button.addEventListener(MouseEvent.CLICK, resume_program);
function resume_program(event:MouseEvent)
{
current_movie_clip.gotoAndPlay(current_frame);
}
Если это правильная идея, как лучше всего определить, что приложение должно быть отложено?
И, что более важно, может ли проигрыватель Flash Player обнаружить, что некоторые из его запущенных программ бездействуют, и аналогичным образом отложить их до тех пор, пока пользователь не выполнит действие для их возобновления?
(Пожалуйста, не стесняйтесь отвечать на столько или меньше вопросов, которые я задавал.)