短いバージョン:アクティビティと開始されたサービスの両方から同じDBにアクセスするためのベストプラクティスの方法は何ですか?
ロングバージョン:アクティビティから永続的なサービスを開始する場合があります。アクティビティが画面にデータを表示している間、サービスはDBにデータを入力しています。どちらも常に実行されているわけではありません。サービスはアクティビティがないときに実行でき、アクティビティはサービスがまだ開始されていないときに実行できます。ただし、サービスはアクティビティからのみ停止できます(それ自体が停止することはありません)。
SQLiteOpenHelperのサブクラスを使用してDBにアクセスしています。私がつまずいた問題は、あるインスタンスでDBを閉じると、別のインスタンスでもDBがSQLiteOpenHelper
閉じられるように見えることです。
私はこれらのオプションを考えることができます:
- シングルトンパターン(パブリック静的変数内の単一
SQLiteDatabase
インスタンス-アクティビティのみがそれを閉じることができます(サービスが実行されているかどうかを認識しているため))-醜い - 他のサービス/アクティビティを閉じる前に、サービス/アクティビティが実行されているかどうかを確認してください-醜い
- 取得/リリースをSQLiteOpenHelperの
getReadableDatabase()
/にビルドしますclose()
3.を使用しますが、これは非常に一般的なパターンである必要があるため、このような組み込みのメカニズムがすでに存在するかどうか疑問に思います。車輪の再発明はしたくありません。
言い換えれば、それを行うための適切な方法は何でしょうか?