У меня есть огромные базы данных (~ 40K строк), с которыми я сталкиваюсь в своем приложении. Существует одно действие, которое имеет представление списка, которое использует CursorAdaptor для отображения и поиска во всех строках базы данных. Каждый раз, когда пользователь имеет дело с базой данных, я открываю базу данных и создаю требуемый курсор, и я вызываю Cursor.getCount() в другом потоке, чтобы решить проблему лень курсоров и сделать ее полностью готовой к будущим операциям. Требуется около 7 секунд для выполнения Cursor.getCount() для огромных баз данных.Как правильно использовать одну и ту же базу данных и курсор через все приложение?
Пользователи могут вызывать это действие несколько раз, поэтому я храню курсор в глобальном классе как статический член данных, и я всегда использую тот же самый курсор.
Я предполагаю, что если я не закрою курсор и базу данных правильно, я могу получить странные результаты. Правильно?!
Мой вопрос: когда я должен закрыть курсор и базу данных?
Невозможно закрыть базу данных и курсор в Activity.onStop(), так как мне придется повторно открывать базу данных и курсор каждый раз, когда активность переходит из невидимой в видимую. И если я закрою в Activity.onDestroy, тогда приложение может быть убито ОС (когда доступная память устройства будет низкой) до вызова onDestroy.
«Получение» курсора - относительно быстрая операция, нет? –
Да, @pst, чтобы просто получить курсор так быстро, но первое взаимодействие между адаптером и курсором занимает много времени (в зависимости от размера результатов курсора). Вот почему я явно называю 'Cursor.gerCount()' в другом потоке с индикатором выполнения в основном потоке, чтобы сделать какие-либо взаимодействия после этого с помощью курсора довольно быстро. –
40K строк не огромен. Это TINY !!!! –