9

このタイトルは少しクレイジーに聞こえるかもしれませんが、これが私を混乱させているものです. 私のアプリは、ローカル データベース操作を頻繁に使用します。Android のドキュメントといくつかのブログで提案されているように、クラスを拡張し、SQLiteOpenHelperそこですべての DB 操作を定義しました。一部の DB 操作はスレッドで実行されるため、db を開いたり閉じたりすると、IllegalStateExceptions. そこで、DB ヘルパーを asSingletonにして、これらの問題を解決し、すべての DB アクションのopenand操作も取り除きました。closeDBを閉じなくても、すべてが正常に機能しているようです。

  • 私の混乱は、DBを閉じる必要があるということですか?
  • もしそうなら、それを行うのに適切な場所はonDestroyどこですか? それは主な活動の中ですか、それとも他の場所ですか?
  • DB を閉じないと、どのような副作用がありますか?
4

3 に答える 3

2

IllegalStateException同じデータベースを再度開こうとすると、キャッチできます。

DBHelperメイン アクティビティのinメソッドのインスタンスを作成するとonCreate、db in を閉じるための書き込みになりますonDestroy。したがって、データベースの次回onCreateはまだ開いていないことを確認できます。

使用中の参照がある場合はDBHelper、使用中ではなく使用中に開閉する必要があります。

クラスを使用してdbを開くこともできますがApplication、アプリが起動するたびに開かれます(たとえば、を受け取ったときBroadcastReceiver

于 2012-07-12T07:40:56.817 に答える
0

例外が発生する理由は、異なるスレッドを介して同じデータベースから読み書きしようとしているからです。

データベースを閉じるのに最適な場所は、 mainActivity 内だonDestroy()と思います

于 2012-07-12T07:47:33.797 に答える
0

私は同じ問題に直面しました。データベースを開き、いくつかの操作を実行しましたが、閉じるのを忘れました。実際には、「リークが見つかりました」というログキャットの例外がいくつか見られました。データベースは開かれ、閉じられません。

于 2012-07-12T08:02:01.213 に答える