Улучшить производительность Spinner - PullRequest
0 голосов
/ 22 марта 2011

Я работаю с 12 счетчиками, которые связаны с одной таблицей базы данных, содержащей более 20 000 записей. Каждый счетчик привязан к отдельному запросу, чтобы сделать выбор динамическим (на основе предыдущих выборов). Код работает, но у меня ужасная производительность из-за количества запросов и размера таблицы в базе данных. Начальная раскладка занимает более 20 секунд для загрузки. Это связано с тем, что во время компоновки для первого счетчика устанавливается начальный выбор, что также приводит к заполнению 11 других счетчиков. На производительность также влияет использование блесны. Если я изменю первый выбор, обновление всех остальных счетчиков займет приблизительно 10 секунд.

С чего мне начать в поисках лучшей производительности? Таблица базы данных? Запросы? Или я должен избегать использования 12 блесен?

Ответы [ 2 ]

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

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

В этом видео (1 час) много полезного: http://www.google.com/events/io/2010/sessions/writing-zippy-android-apps.html

0 голосов
/ 22 марта 2011

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

Также:

  • Установите своймакет, а затем начать загрузку ваших данных.По крайней мере, так выглядит что-то, пока пользователь ждет.
  • Выполняйте всю длительную работу в AsyncTask / Thread, чтобы избежать блокировки потока пользовательского интерфейса
  • Убедитесь, что у вас есть первичные индексы в таблицах базы данных.и запрашивайте их, где это возможно
  • Не загружайте все свои данные сразу, просто выполняйте каждый запрос по необходимости
...