2012-06-09 1 views
0

У меня есть огромные базы данных (~ 40K строк), с которыми я сталкиваюсь в своем приложении. Существует одно действие, которое имеет представление списка, которое использует CursorAdaptor для отображения и поиска во всех строках базы данных. Каждый раз, когда пользователь имеет дело с базой данных, я открываю базу данных и создаю требуемый курсор, и я вызываю Cursor.getCount() в другом потоке, чтобы решить проблему лень курсоров и сделать ее полностью готовой к будущим операциям. Требуется около 7 секунд для выполнения Cursor.getCount() для огромных баз данных.Как правильно использовать одну и ту же базу данных и курсор через все приложение?

Пользователи могут вызывать это действие несколько раз, поэтому я храню курсор в глобальном классе как статический член данных, и я всегда использую тот же самый курсор.

Я предполагаю, что если я не закрою курсор и базу данных правильно, я могу получить странные результаты. Правильно?!

Мой вопрос: когда я должен закрыть курсор и базу данных?

Невозможно закрыть базу данных и курсор в Activity.onStop(), так как мне придется повторно открывать базу данных и курсор каждый раз, когда активность переходит из невидимой в видимую. И если я закрою в Activity.onDestroy, тогда приложение может быть убито ОС (когда доступная память устройства будет низкой) до вызова onDestroy.

+0

«Получение» курсора - относительно быстрая операция, нет? –

+0

Да, @pst, чтобы просто получить курсор так быстро, но первое взаимодействие между адаптером и курсором занимает много времени (в зависимости от размера результатов курсора). Вот почему я явно называю 'Cursor.gerCount()' в другом потоке с индикатором выполнения в основном потоке, чтобы сделать какие-либо взаимодействия после этого с помощью курсора довольно быстро. –

+1

40K строк не огромен. Это TINY !!!! –

ответ

1

Почему бы вам не превратить этот глобальный статический класс в singleton, чтобы вы не столкнулись с проблемами создания экземпляров, которые звучат так, как будто вы ссылаетесь. Как только вы вызываете getInstance() в вашем singleton, вы всегда будете получать одинаковый курсор и соединение DB в этом классе.

+0

Я уже всегда получаю тот же экземпляр для курсора. Вопрос в том, когда закрыть этот курсор и базу данных? потому что я заметил, что база данных не закрыта должным образом, возникают странные проблемы! –

Смежные вопросы