У меня есть довольно таки сложный sql запрос который выполняется пару секунд, работа происходит через кастомный cursor адаптер. При открытии активити оно малость тупит, хочу чтобы пока выполняется запрос крутился прогресс бар, а активити стартовало моментально. Пробовал выполнять через AsyncTask, селект делать в doInBackground, а в адаптер его сувать в onPostExecute, но понял что тупит когда курсор делает первое смещение а это уже в потоке интерфейса. Видно это такая особенность андроида выполнять запрос по первому смещению.
Подскажите как это побороть?
Загрузка ListView в отдельном потоке
Re: Загрузка ListView в отдельном потоке
1) каждую ячейку следует грузить в отдельном потоке, дело не в листе а в адаптере, там и следует копать. но это если заведомо известно количество ячеек.
2) выгружать с бд по одной строке данных, кидать её адаптеру, обновлять и всё по новой пока не заполнится весь адаптер, конечно же это всё в отдельном потоке.
З.Ы. сомневаюсь что дело в запросе, это ж сколько там должно быть данных? 100 000 строк!?!
2) выгружать с бд по одной строке данных, кидать её адаптеру, обновлять и всё по новой пока не заполнится весь адаптер, конечно же это всё в отдельном потоке.
З.Ы. сомневаюсь что дело в запросе, это ж сколько там должно быть данных? 100 000 строк!?!
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: Загрузка ListView в отдельном потоке
Данных не 100 000, где то 10 000, и сам запрос сложный, куча подзапросов, куча группировок по куче полей и всякие суммирования и т.д.. Запрос уже как мог оптимизировал, дальше некуда.
Адаптер унаследован от SimpleCursorAdapter, соответственно выгружает и собирает строки по мере прокрутке. Что то я слабо представляю как грузить ячейку в отдельном потоке
. Так же я заметил что тупит лишь при первом сдвиге, дальше крути не хочу, выгружает быстро, видно кеширует.
Адаптер унаследован от SimpleCursorAdapter, соответственно выгружает и собирает строки по мере прокрутке. Что то я слабо представляю как грузить ячейку в отдельном потоке
Re: Загрузка ListView в отдельном потоке
для начала засеките время в своём SQLiteOpenHelper'e до выборки курсора и после, посмотрите сколько занимает времени, посмотрим сколько будет и там уже решим что делать.
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: Загрузка ListView в отдельном потоке
3 секунды, уже засекал.
Re: Загрузка ListView в отдельном потоке
Я кажись нашел способ, как обычно, правильная формулировка вопроса имеет в себе ответ
. Надо в doInBackground сделать moveToNext() и обратно moveToPrevious(). Тупит только на вервом moveToNext() потом видно из кеща берет.