Переход от 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, но это может быть ложным:

http://code.google.com/p/android/issues/detail?can=2&start=0&num=100&q=&colspec=ID%20Type%20Status%20Owner%20Summary%20Stars&groupby=&sort=&id=4993

Когда дело доходит до данных для каждой строки, у меня есть SQLiteblob:

byte[] avatar = cursor.getBlob(cursor.getColumnIndex(Profile.TABLE_COLUMN_AVATAR));

Я думаю, что это может быть одной из проблем, но я не уверен. Я, вероятно, должен переключить образ / с на SD-карту и вместо этого сохранить путь в БД. Я хотел бы сохранить свои текущие настройки, хотя.

Тогда это говорит о том, что мой нынешний подход не будет управляемым, и, следовательно, может потребоваться новый подход. Так что это заставляет меня задуматься о решении Endless Adapter, которое будет означать получение данных курсора с ограничением / смещением и заполнение ArrayAdapter и используя каркас, как CommonWare's EndlessAdapter (Возможно)?

  1. Моя проблема с производительностью меньше связана с CursorAdapter и многое другое с использованием Blobs?
  2. Должен ли я использовать метод бесконечного адаптера с потенциально большими наборами данных?
  3. CommonWare's EndlessAdapter все еще хорошее решение после 4 лет?

1 ответ

Решение

Моя проблема с производительностью меньше связана с CursorAdapter и больше с использованием BLOB-объектов?

Используйте Traceview, чтобы точно определить, где находится ваша проблема. В будущем вы также можете подумать о более конкретном вопросе, так как мы понятия не имеем, что означает "трудное время".

Должен ли я использовать метод бесконечного адаптера с потенциально большими наборами данных?

Если ваше "трудное время" заключается в начальной загрузке данных из вашей базы данных, возможно, хотя кто-то там может иметь решение с бесконечным списком, которое будет нормально работать с набором CursorAdapters,

Если ваше "трудное время" заключается в прокрутке результатов, то нет, EndlessAdapter или эквиваленты не помогут вам.

Является ли CommonWare EndlessAdapter хорошим решением через 4 года?

Для его случая использования, конечно. С другой стороны, я пристрастен.:-)

Другие вопросы по тегам