2011-01-09 22 views
2

私はSQLiteDatabaseインスタンスを作成し、getReadableDatabase()またはgetWritableDatabase()を呼び出し、そのようにデータを操作しますが、db.close()でデータベースを決して閉じることはありません。それを閉じないと悪いですか?私はonStop()またはonDestroy()メソッドにdb.close()を追加しようとしましたが、強制的に強制終了します。Android sqlite接続を開いたまま

答えて

5

可能な限り遅く接続を開きます。できるだけ早く閉じてください。 "finally"ブロックで閉じて、閉じていることを確認します。

一般に、リソースを取得するのと逆の順序で処理します。

+0

のOnPause()メソッドで閉じます。ありがとう、主よ! :) – mlvljr

+0

私はロガープログラムを持っています。データベースを頻繁に開いたり閉じたりするのが本当に理にかなっているのでしょうか(たとえば、GPSをロギングする毎秒)。また、(sqlcipher)を使用しているバリアントは、数千回開いたときにクラッシュするように見え、アプリの開始ごとに1回開くだけで回避策になります。 (これはサービス中、btwです) – Michael

2

基本的には、余分なカーソルを開いてアプリケーションを拡張しています。ベストプラクティスは、接続を閉じることです。

あなたがそれをしないと、多くの例外がスローされていることに気付きました。

+2

データベースを閉じることはどこから適切でしょうか? – semajhan

+1

@セマハン私は通常、アクティビティ – GSree

0

データベース接続を終了しないと、時間の経過とともにメモリリークが発生します。 startManagingCursorを使用することができますが、これに伴いdb接続を閉じる必要があります。ところで、onStop()またはonDestroy()メソッドでdb接続を閉じる際にどのようなエラーまたは例外が発生しているのかを確認してください。

関連する問題