0

私はアプリを書いており、すべてのアクティビティとサービスは私の Sqlite データベースを使用しています。現状では、db をインスタンス化し (db = new DBAdapter(this);)、すべてのアクティビティの onCreate メソッドで開き、onStop メソッドで閉じます。これは正しい方法ですか、それともどうにかしてデータベースをグローバルにする必要がありますか? それとも、何らかの形でバンドル内のアクティビティ間で渡す必要がありますか?

また、フラグメントを使用するように UI を変更することも検討しています。これは、同じデータベースにアクセスするコンポーネントがさらに増えることを意味します。フラグメントの進行は線形であるため、フラグメントがない場合は、各アクティビティでデータベースを開いたり閉じたりしても比較的問題ないようです。しかし、フラグメント (私が学び始めたばかりです) を使用すると、同じ画面に多数のフラグメントが存在する可能性があるため、それぞれがデータベースの独自のインスタンスを持っている場合、それらが競合するのではないかと心配します。したがって、これらの状況でデータベースをどのように処理する必要があるかについてのアドバイスをいただければ幸いです。

助けてくれてありがとう。

4

2 に答える 2

0

すべてのデータベース転送を処理するすべてのアクティビティの外部にあるクラスを作成してみませんか? そうすれば、すべての db アクセスを処理するクラスにクエリを実行できます。

アプリケーションとデータベースの間に抽象化のレイヤーを配置できます。これにより、アプリケーションが必要とするのは、適切な引数を使用した関数呼び出しだけです。

アプリケーション内のすべての db アクセスのこの方法をいじりたいと決めた場合、1 つのコード セットを変更するだけでよく、関数呼び出しはほとんど同じままです。

効率に関する限り、ストレージから大量のデータを取得しない限り、データベースを開いたままにしておくことは問題になりません。

しかし、そのためには、クエリごとに開いたり閉じたりする価値があるかもしれません。データベースが開いている間にバッテリーが切れたらどうなるでしょうか?

いずれにせよ、データベースとアプリケーション間の抽象化のレベルにより、データベースへのアクセス方法を簡単に変更できます。

于 2013-07-01T15:48:32.433 に答える
0

データベース アクセス コードをコーディングする代わりにフレームワークを使用することに関心がある場合は、Active Android ( http://www.activeandroid.com/ ) を参照してください。私たちのアプリケーションでは、このフレームワークが処理を行うため、いつデータベースを開いたり閉じたりするかについて心配する必要がなくなりました。

Application オブジェクトの onCreate および onTerminate を使用してフレームワークを初期化および初期化解除し、その間にデータベースの開閉に関連する操作を実行します。何らかの理由でフレームワークを使用したくない場合は、そこからヒントを得て、同様のモデルに従うことができます

于 2013-07-01T15:50:42.103 に答える