2013-12-05 3 views
0

Я таргетинг мобильных устройств с помощью FlashBuilder, я использую TileLayout для просмотра элементов данных, я устанавливаю useVirtualLayout «истина» у меня есть некоторые вопросы, пожалуйста:Советы по повышению производительности TileLayout?

  1. Является resued визуализации элементов по умолчанию? или я должен утверждать, что это правда?
  2. Как я могу контролировать диапазон виртуализации элементов?
  3. Есть ли советы по повышению производительности при создании детских предметов TileLayout?

Если родной TileLayout не работает, есть ли альтернативный контроль? если бы построение моего собственного было бы лучше, есть ли какой-нибудь пример для создания пользовательского макета?

ответ

1
  1. По умолчанию установлено значение true. Однако есть несколько примеров, когда они не виртуализированы. Если у вас есть размер списка, соответствующий его содержимому, я не считаю, что виртуализация происходит. Если я не ошибаюсь, виртуализация возникает только тогда, когда ItemRenderer оставляет viewport основного элемента управления List. Поэтому, если у вас есть список на странице, и эта страница контролирует прокрутку, а не список, я не верю, что вирутализация происходит. Это то, что я видел в прошлом. Не уверен, что так оно и работает, но это впечатление, которое я получил. Легкий способ узнать, это бросить инструкцию trace в обработчике DataChange. Если после инициализации он прослеживается, вы знаете, что виртуализация работает
  2. Я не уверен, что вы можете контролировать это. Возможно, вы сможете написать собственный макет, который делает это, но это, вероятно, больше проблем, чем стоит
  3. Сам по себе TileLayout, вероятно, не проблема, которую вы имеете, это ItemRenderer.
    • На мобильном телефоне не распространяются никакие ItemRenderer класс, кроме LabelItemRenderer и IconItemRenderer.
    • Не написать рендер в MXML. Напишите в AS3.
    • Используйте правильный жизненный цикл рендеринга. Это означает, что вы должны делать очень мало в своем конструкторе. Возможно, задано несколько свойств, но не экземпляр любого DisplayObject. Вместо этого переопределите createChildren() и сделайте это там. Переопределить layoutContents() для позиционирования и калибровки. Переопределить drawBackground() для обработки фона. Я настоятельно рекомендую прочитать этот пост от Flextras (вы увидите, что он собирается на Reboog77 на SO) о написании мобильных рендерингов элементов. https://www.flextras.com/blog/index.cfm/2011/6/24/Building-a-Mobile-ItemRenderer-in-Flex
    • Держите средства визуализации как можно более простыми. Если вы можете уйти с рисованием непосредственно в объект, используя класс Graphics, сделайте это вместо использования Rect или аналогичного.
    • Текст медленно визуализируется. Не меняйте его часто и сохраняйте текст, видимый в рендерере, до минимума
    • Используйте ContentCache для любых изображений за пределами iconDisplay в IconItemRenderer. ContentCache будет отрицать необходимость повторной загрузки изображений каждый раз. (iconDisplay/icon уже использует это по умолчанию)
+0

Мне нравится этот комментарий. Это очень информативно о том, как работать в мобильной среде. –

+0

Спасибо за информативный ответ, но как насчет повторного использования тех же экземпляров ItemRenderers? не будет ли это экономить время на создание новых ItemRenderers снова и снова? повторно используется (переработка) ItemRenderers тоже поддерживается? – simo

+0

@simo Это поведение ** по умолчанию ** элемента ItemRenderer. В этом вся цель их существования. Существует свойство, называемое 'useVirtualLayout' для всех классов, которые расширяют' LayoutBase'. Если для этого параметра установлено значение true, то, как это указано по умолчанию, ItemRenderers повторно используются, за исключением случаев, отмеченных в # 1 в моем ответе. http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/spark/layouts/supportClasses/LayoutBase.html#useVirtualLayout –

Смежные вопросы