Переход от CursorAdapter к бесконечной реализации адаптера
Я занимаюсь разработкой приложения для Android Api 15 и выше.
Я использовал кастом CursorAdapter
реализация с ListView
уже некоторое время. У меня сложилось впечатление, что даже со многими тысячами строк (записей) ListView
будет заниматься производительностью сторону вещей.
Мой телефон, Sony Xperia U, с трудом прокручивает больше 10 - 20 строк. Первые несколько строк хорошо прокручиваются, а затем я падаю на стенку заикания, и устройство перестает отвечать на запросы (всего 70 строк вместе). Это работает под управлением Android 4.0.4. Другие телефоны, такие как Samsung S3 и Sony Xperia Z, работают намного лучше, но в какой момент это ухудшится. Эти 2 телефона работают 4.1. Я получаю CursorWindow
предупреждение видно ниже на Xperia U.
Я реализовал все трюки в торговле, ViewHolder
шаблон и т. д., и все изображения загружаются внутри AsyncTask
"S.
В любом случае, проблема, с которой я сталкиваюсь, не связана с BindView
, BindView
Метод завершается довольно быстро - в течение 1-3 миллисекунд.
Я считаю, что проблема заключается в CursorWindow
, Я действительно даже не знаю, что это такое!
08-14 21:01:58.913: W/CursorWindow(7116): Window is full: requested allocation 277981 bytes, free space 148792 bytes, window size 2097152 bytes
Я также читал, что есть проблема в CursorWindow
до потенциально 4,2, но это может быть ложным:
Когда дело доходит до данных для каждой строки, у меня есть SQLite
blob
:
byte[] avatar = cursor.getBlob(cursor.getColumnIndex(Profile.TABLE_COLUMN_AVATAR));
Я думаю, что это может быть одной из проблем, но я не уверен. Я, вероятно, должен переключить образ / с на SD-карту и вместо этого сохранить путь в БД. Я хотел бы сохранить свои текущие настройки, хотя.
Тогда это говорит о том, что мой нынешний подход не будет управляемым, и, следовательно, может потребоваться новый подход. Так что это заставляет меня задуматься о решении Endless Adapter, которое будет означать получение данных курсора с ограничением / смещением и заполнение ArrayAdapter
и используя каркас, как CommonWare's EndlessAdapter
(Возможно)?
- Моя проблема с производительностью меньше связана с
CursorAdapter
и многое другое с использованиемBlob
s? - Должен ли я использовать метод бесконечного адаптера с потенциально большими наборами данных?
- CommonWare's
EndlessAdapter
все еще хорошее решение после 4 лет?
1 ответ
Моя проблема с производительностью меньше связана с CursorAdapter и больше с использованием BLOB-объектов?
Используйте Traceview, чтобы точно определить, где находится ваша проблема. В будущем вы также можете подумать о более конкретном вопросе, так как мы понятия не имеем, что означает "трудное время".
Должен ли я использовать метод бесконечного адаптера с потенциально большими наборами данных?
Если ваше "трудное время" заключается в начальной загрузке данных из вашей базы данных, возможно, хотя кто-то там может иметь решение с бесконечным списком, которое будет нормально работать с набором CursorAdapters
,
Если ваше "трудное время" заключается в прокрутке результатов, то нет, EndlessAdapter
или эквиваленты не помогут вам.
Является ли CommonWare EndlessAdapter хорошим решением через 4 года?
Для его случая использования, конечно. С другой стороны, я пристрастен.:-)