У меня есть база данных с более чем 6000 записей. Я использую этот пример http://eshyu.wordpress.com/2010/08/15/cursoradapter-with-alphabet-indexed-section-headers/ для отображения содержимого. Но теперь активность не может справиться с этим. Я получаю диалоговое окно ANR каждый раз. Как мне эффективно справиться с этим обстоятельством?
Управление 6000+ контактами из базы данных
comment
эта часть выглядит неэффективно, она посещает каждую запись и плохо масштабируется: for (i = count - 1 ; i ›= 0; i--){ sectionToPosition.put(indexer.getSectionForPosition(i), i);}
- person Phyrum Tea   schedule 08.01.2011
comment
Спасибо @Phyrum Tea, есть идеи?
- person Ragunath Jawahar   schedule 09.01.2011
Ответы (1)
Нет смысла просматривать каждую запись и спрашивать у индексатора, к какому разделу относится эта запись. В вашем случае индексатор может выполнять 6000 бинарных поисков. Затем поместите этот результат в карту, которая будет иметь менее 30 записей, и выполните много перезаписей.
Также не рекомендуется злоупотреблять картой sectionToPosition для создания начальной позиции раздела.
О. Вы либо готовите таблицу, содержащую статистику, что было бы лучшим способом обработки такого большого количества данных.
B. Вы можете использовать базу данных для подсчета количества записей для каждого раздела и построить свою собственную карту начальной позиции раздела.
SELECT UPPER(SUBSTR(LTRIM(side_a), 1, 1)), COUNT(*) FROM cards GROUP BY 1 ORDER BY 1 ASC;
person
Phyrum Tea
schedule
09.01.2011
Основная идея заключается в том, чтобы не читать все записи, а только те, которые должны быть видны.
- person Phyrum Tea; 09.01.2011
Если бы вы могли опубликовать фрагмент, это было бы действительно полезно. Я только учусь. Спасибо @Phyrum Tea
- person Ragunath Jawahar; 10.01.2011