5

マルチスレッドを使用する必要があるアプリケーションに取り組んでいます。アプリケーション全体にSQLiteOpenHelperクラスの単一のインスタンスがあり、データベースを開いたり閉じたりするメソッドと、データを挿入およびフェッチするいくつかのメソッドがあります。

今私の問題は、最初のスレッドでデータベースを開き、同時にトランザクションを開始することです。2番目のスレッドも開かれたデータベースオブジェクトを取得してトランザクションを開始します。

最初のスレッドはプロセスを完了し、反対側のデータベースを閉じます。2 番目のスレッドは動作しており、2 番目のスレッドデータベースが閉じられていることを取得します。

そのいくつかの論理的な問題は、適切な方法でデータベースを閉じる方法をどのように処理できるか、この問題を解決するのを手伝ってください。

前もって感謝します

4

2 に答える 2

3

アプリケーション全体に SQLiteOpenHelper クラスの単一のインスタンスがあり、データベースを開いたり閉じたりするメソッドと、データを挿入およびフェッチするいくつかのメソッドがあります。

これらのスレッドを作成したアクティビティまたはサービスが破棄された場合など、データベースの使用が完全に終了した場合にのみ、データベースを閉じる必要があります。

また、データベースを決して閉じないことも問題外ではありません。を実装するContentProviderと、データベースを閉じることはありません。これにより、開いているデータベース ハンドルのリークに関する LogCat の警告が発生する可能性がありますが、SQLite のトランザクションの性質により、データベースを閉じることができなくても、特定の問題 (バッファーのフラッシュに失敗したなど) は発生しません。

于 2012-10-12T14:22:19.513 に答える