Справиться со сложными макетами на Android - PullRequest
2 голосов
/ 26 мая 2011

У нас есть управляемое данными действие, которое создает большой набор (обычно до 100) кнопочных компонентов и помещает их в Scrollable. Каждая из кнопок надувается из ресурса и основана на RelativeLayout. Кнопка имеет два текстовых представления, два представления изображений - оба из ресурсов - и имеет фон из 9 патчей.

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

К сожалению, на макет на HTC Desire уходит 2-3 секунды, на HTC San Francisco или HTC Sapphire - 3-5 секунд.

Как только начальный макет сделан, представление работает прекрасно.

Мы испробовали несколько стратегий, которые не имели значения:

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

У нас есть неопределенный индикатор прогресса (spinner / throbber), который вращается, пока запрос выполняется в другом потоке, но затем останавливается, когда начинается компоновка.

Итак, мой вопрос:

  • как сделать так, чтобы макеты представлений выглядели более отзывчивыми или
  • как я могу избежать блокировки тоббера, пока происходит макетирование

Спасибо.

Редактировать

Скроллер настроен на горизонтальную и вертикальную прокрутку. Итак, у нас есть сетка, на которой экран является окном просмотра.

Это делает использование встроенного ListView (на первый взгляд) неподходящим для этой задачи.

1 Ответ

0 голосов
/ 26 мая 2011

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

Для повышения производительности вы должны использовать ListView, его можно прокручивать и элементы можно настраивать (вы можете повторно использовать «кнопку» на основе RelativeLayout) с помощью специального адаптера, что позволяет перерабатывать элементы во время прокрутки. См. Повторное использование представлений в виде списка, оно того стоит? , и, прежде всего, это отрывок из книги CommonsWare для Android .

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