гибкий мобильный проект: управление памятью - PullRequest
0 голосов
/ 08 сентября 2011

Я разработал свое первое гибкое мобильное приложение с приложением TabbedViewNavigatorApplication.Приложение работает нормально, но когда я тестирую приложение в «обработчике профиля», использование памяти продолжает увеличиваться по мере навигации по приложению.Когда я узнал об этом, мне пришлось удалить все добавленные списки событий и я должен обнулить объекты, которые больше не нужны.Когда я переключаюсь между вкладками, вкладки инициализируются снова и снова.

Я не знаю, где можно удалить списки событий.Я имею в виду, я написал функции для каждого eventlisteners.Нужно ли удалять EventListener, когда управление переходит к определению функции.

Я написал пример кода

  var more:Image = new Image();
    more.width = 70;
    more.height=29;
    more.x=10;
    more.y=276;
    more.source = "Assets/more button.png";
    more.addEventListener(MouseEvent.CLICK, MORE_clickHandler);
    mainGroup.addElement(more);



private function MORE_clickHandler(e:MouseEvent):void {

// Do I need to remove the eventlistener here

}

Кроме того, мне нужно явно обнулить объект класса Image, который я создалили сборщик мусора справится с этим.Если мне нужно явно аннулировать его, где это сделать.

Спасибо

Ответы [ 2 ]

1 голос
/ 09 сентября 2011

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

Чтобы удалить представление, необходимо сначала удалить его из списка отображения (removeElement(yourObject)), удалить все прослушиватели событий и обнулить любую ссылающуюся переменную. Если какая-либо переменная все еще имеет ссылку на нее, она не будет собирать мусор.

Я рекомендую вам прочитать немного больше о сборке мусора, а также о некоторых хитростях, таких как объединение в пул и виртуализация (средства визуализации элементов в списке).

0 голосов
/ 08 сентября 2011

Вы можете настроить список событий со слабой ссылкой.

Это означает, что, когда единственной ссылкой на ваш объект является слушатель, сам объект все еще может быть собран мусором, и слушатель не будет хранить его вmemory.

Следующие действия помогут:

more.addEventListener(MouseEvent.CLICK, MORE_clickHandler,false, 0, true);

Другой вариант - создать подкласс класса изображения и позволить ему реализовать интерфейс IDisposable, что заставит вас реализоватьdispose() method.

Некоторые полезные ресурсы:http://www.intriguemedia.net/2007/09/24/when-to-use-weak-references
http://gskinner.com/blog/archives/2006/07/as3_weakly_refe.html

ура

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...