В нашей компании мы разрабатываем приложение, которое отображает временную шкалу. Мы готовы разрешить пользователю прокручивать его (почти) на неопределенный срок.Как реализовать бесконечный CursorAdapter?
В настоящее время существует 2 фактов, чтобы рассмотреть следующие вопросы:
- Загрузка большой курсор может иметь плохое влияние на спектаклях (особенно верно для старых устройств)
- курсоров seem to have a size limit 1Мб
В текущей реализации мы загружаем по умолчанию 40 элементов, а затем, когда пользователь прокручивается за пределы определенного порога, мы повторяем запрос, увеличивая ограничение до 40 + 20 элементов и так далее.
Однако этот подход выглядит довольно слабым, потому что он сталкивается с обоими принципами, изложенными ранее: запрос в конечном итоге станет довольно большим, и в какой-то момент курсор может достигнуть предела памяти 1 МБ (мы загружаем много строк).
Теперь мы думаем о эксплуатируя MergeCursor и действуйте следующим образом:
- нагрузки курсор из 40 пунктов в первый раз
- Когда пользователь прокручивает выше определенного уровня, мы загружаем другой курсор, содержащий следующие 40 элементов и установите в адаптере курсора MergeCursor, который соединяет новый курсор с предыдущим.
- Продолжайте этот подход до тех пор, пока не будет выполнено X шагов (в зависимости от тестов), чтобы избежать попадания какого-либо исключения OOM. В конце курсор временной шкалы будет конкатенацией курсоров X.
Что вы думаете об этом подходе? Любая слабость (кроме накладных расходов, которые должны быть небольшими)?
В случае, можете ли вы указать/описать лучшие решения?
Заранее спасибо
Просто интересно вслух: если вы ограничите данные курсора только тем, что вам нужно для показа целей, будет ли еще какой-либо практический риск столкнуться с возможными описанными проблемами? Я использовал «CursorAdapter» с тысячами элементов, не замечая при этом больших результатов производительности (хотя он становится более сложным с быстрыми индексами прокрутки и раздела). Тем не менее, интересный вопрос! Я предполагаю, что решение, содержащее ограниченное количество страниц, решит проблему. Любые дополнительные ограничения? То есть вышеупомянутая быстрая прокрутка и/или секционирование индексации? –
use AbstractWindowedCursor then – pskink
спасибо за комментарии, я исследовал больше и, вероятно, нашел решение моих сомнений. Дайте мне знать, если я ошибаюсь. – Giordano