2013-03-03 3 views
0

Я разрабатываю приложение с sqlite, но я не знаю, когда я должен открыть и закрыть мою базу данных.Лучшие практики с Sqlite Android

  • Хорошая практика заключается в том, что база данных открыта во время работы приложения?
  • Должен ли я открывать и закрывать базу данных только тогда, когда я там читаю/пишу?
  • Имеет ли это значение?

ответ

1

Хорошая практика поддерживает открытие базы данных во время работы приложения?

Это личное предпочтение.

Я лично оставил его открытым все время и закрою его в каком-то жизненном цикле, таком как onStop() или onDestroy(). Таким образом, вы можете легко проверить, действительно ли база данных уже используется, вызывая isDbLockedByCurrentThread() или isDbLockedByOtherThreads() на одном объекте SQLiteDatabase каждый раз, прежде чем использовать его. Это предотвратит множественные манипуляции с базой данных и сохранит ваше приложение от потенциального сбоя, что возможно, если у вас случайно есть два открытых экземпляра в случае, когда вы открываете/закрываете для чтения/записи.

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

Кроме того, вы должны использовать транзакции для уменьшения операций записи на диск за раз.

Имеет ли это значение?

База данных - это еще один файл на диске в конце дня. Если вы попытаетесь записать его из нескольких потоков/экземпляров одновременно, у вас возникнут проблемы.

+0

. Я не согласен с тем, что соединение открыто все время, нет никаких оснований для этого. –

+0

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

1

Да, это важно. В любом приложении, не просто мобильном, всегда лучше всего поддерживать соединение с базой данных только до тех пор, пока оно вам нужно, чтобы выполнить операцию над указанной базой данных. Это означает, что вы должны закрыть соединение как можно скорее. Соединения - это ограниченный ресурс, и важно не связывать их.

+0

Первое спасибо за ваш ответ. Но если запись и чтение из базы данных занимает некоторое время, почему я должен это делать? : \ Приложение должно быть как можно быстрее. – user1866731

+0

Я не уверен, что «открытие/закрытие» соединения сделает ваше приложение намного медленнее. Также ознакомьтесь с http://stackoverflow.com/questions/4842112/when-to-close-db-connection-on-android-every-time-after-your-operation-finished –

+0

От андроида API «Like getWritableDatabase(), этот метод может занять много времени, поэтому вы не должны вызывать его из основного потока приложения « – user1866731

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