Android: построение View с большим количеством элементов невероятно медленно (более 10 секунд) - PullRequest
2 голосов
/ 19 марта 2011

Прежде всего: я начал разрабатывать для Android только недавно, поэтому, пожалуйста, не бросайте меня за то, что задаете глупые / очевидные вопросы!; D

Проблема, с которой я сталкиваюсь, заключается в следующем: я хочу отобразить список интерактивных элементов неизвестной длины - мой примерный набор данных составляет около 300. Использование LinearLayout и добавление их всех в виде TextViews занимает примерно половинувторой на эмуляторе, что совершенно нормально.Чтобы улучшить пользовательский опыт, я заменил LinearLayouts теперь на Relative Layouts, каждый с фоновым изображением, 2 TextViews и 3 ImageViews.Все изображения включены в ресурсы, поэтому не теряйте времени на скачивание или еще много чего.

Проблема в следующем: теперь для создания этого представления требуется около 10 секунд, что, очевидно, не является приемлемым решением.Я предполагаю, что полный пользовательский интерфейс полностью построен, несмотря на то, что только его часть видна всегда (с использованием некоторого контейнера прокрутки)

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

Есть ли какие-то прокси-интерфейсы пользовательского интерфейса, которые я просто должен активировать?Или вы бы порекомендовали создать экран с первыми 10 элементами и загрузить остальные в фоновом режиме в отдельном потоке?(Понятия не имею, как на это отреагируют контейнеры прокрутки - или вообще пользовательский интерфейс Android)

Заранее всем спасибо за помощь!=)

tl; dr: Создание больших представлений слишком медленное - нужна помощь! щенячьи глаза

Ответы [ 2 ]

4 голосов
/ 19 марта 2011

Я хочу отобразить список интерактивных элементов неизвестной длины - мой примерный набор данных составляет около 300

. Используйте ListView или любой другой подкласс AdapterView.

Я предполагаю, что полный пользовательский интерфейс полностью построен, несмотря на то, что видна только его часть (с использованием некоторого контейнера прокрутки)

Это то, что подклассы AdapterView, как и ListView, предназначены только для создания виджетов только для того, что видно, а не для всей модели данных.

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

Используйте ListView или любой другой подкласс AdapterView.

Существуют ли какие-то прокси-интерфейсы пользовательского интерфейса, которые мне просто нужно активировать?

Нет.

Или вы бы порекомендовали создать экран, подобный первым 10 элементами загрузить остальные в фоновом режиме в сентябреarate Тема?

Нет.Главным образом потому, что вы потерпите крах.Вы можете изменять пользовательский интерфейс только из основного потока приложения, а не из фонового потока, который вы разветвляете.

1 голос
/ 19 марта 2011

Очевидно, что ответ Марка правильный и путь, которым вам нужно идти для решения этой конкретной проблемы.

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

В общем, если вам нужно что-то и вы думаете, что это может быть слишком много усилий, но достаточно распространено, чтобы это уже было сделано кем-то , я рекомендую эти шаги:

  • Откройте документацию и найдите в разделе «Косвенные подклассы» что-то, что звучит так, как вам нужно.
  • Откройте пример приложения API Demos и посмотрите, сможете ли вы найти то, что похоже на то, чего вы пытаетесь достичь. Он имеет достаточно хороший охват API, и вы можете легко найти код в разделе Sample Code .
  • Ознакомьтесь с другими примерами проектов. В этом каталоге есть несколько довольно вовлеченных.

Конечно, Stack Overflow - отличный ресурс, но иногда ответы слишком конкретны и не позволяют открывать новые функции.

...