2015-07-31 2 views
0

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

То, что я хочу сделать, довольно просто: отображает Android ListView с большим количеством сохраненных в базе данных строк. И «много» я ​​имею в виду до 100 МБ, но ListView должен начать показывать вещи без задержки.

Контекст: это приложение для управления заметками, и по умолчанию оно должно отображать все незаписанные примечания пользователя. Я изучаю, как приложение будет вести себя, если будет много заметок.

Теперь я использую рекомендуемый подход с каркасом Loader: начиная с запроса ContentProvider в onCreateLoader и назначая полученный курсор адаптеру ListView в onLoadFinished.

Все еще это мучительно медленно (начальная нагрузка до 10 с). Я изучил источники Cursor и знаю, что он хранит «окно» данных, так что не все 100 Мб текста должны быть загружены сразу. Однако, похоже, это так.

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

Так может ли кто-нибудь помочь в этом? Является ли ленивая загрузка ответа? Почему Cursor не делает это сам? Как это сделать правильно - нужно ли сначала кэшировать массив идентификаторов и загружать куски при прокрутке?

Спасибо!

+0

, что адаптер вы используете и как? – pskink

+0

Я использую простой класс CursorAdapter, который в своем методе bindView получает данные из Курсора и назначает его представлениям из ViewHolder (созданным ранее в newView). –

+0

Вы можете попробовать, загрузив данные в куски. – Beena

ответ

2

SimpleCursorAdapter + CursorLoader должен работать нормально, кажется, что ваш запрос БД является то, что медленно, скорее всего, вы хотите, чтобы отсортировать данные по полю без индекса

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