5

私はAndroid開発(率直に言って開発全体)に不慣れであるため、CommonswareBusyCoderのガイドを読んでいます。SQLiteのセクションを読んでいる間、私には100%明確ではないことがいくつかあります。以下は私が起こっていると私が信じていることといくつかの質問です。思考過程が間違っている場合は訂正してください。

作成者は、アプリケーションで複数のアクティビティのデータベースを使用する場合は、各アクティビティのコンテキスト参照を使用してSQLiteOpenHelperをインスタンス化しないことをお勧めします。代わりに、getApplicationContext()Activityが提供するものを使用する必要があります。

そうすることで、彼はgetApplicationContext()、アプリケーションプロセスの開始直後に作成されたContextのシングルトンインスタンスを取得するという事実を利用します。ここで私の質問が発生します。SQLiteOpenHelperをインスタンス化するときにActivity(thisキーワード)によって提供されるコンテキストを使用する場合、各ActivityはSQLiteOpenHelperの独自のインスタンスを作成すると思います。アクティビティのコンテキストを使用するだけでは、SQLiteHelperのインスタンスがすでに作成されていることをアプリケーションコンテキストに通知しないため、既存のインスタンスを再利用するのではなく、新しいインスタンスを作成するように見えます。私の考えは正しいですか?

私は、コンテキスト(および間違っている場合は修正する)を、Android OSによって提供される情報とリソースを取得する(つまり、を介してシステムサービスを取得する)開発者の「ゲートウェイ」と考えていますgetSystemService()。ただし、これを(アクティビティから)使用するか、を使用すると、getApplicationContext()異なる意味があります。これを使用すると、現在のアクティビティに対して「ローカル」であるContextのインスタンスが取得されますが、使用するとgetApplicationContext()アプリケーション全体が参照されます。これが正しければgetApplicationContext()SQLiteOpenHelperのコンストラクターへの参照を渡すと、 SQLiteOpenHelperのインスタンスが既に作成されていることをアプリケーション全体に通知することを意味しますか。SQLiteOpenHelperはどのように機能しますかアプリケーションにこれを知らせますか?public / private static dbCreated(Context context){//この実行中のインスタンスがあることをコンテキストに通知する}などの静的メソッドを使用して、アプリケーションに通知しますか?

紛らわしい場合は申し訳ありません。

よろしくお願いします

4

2 に答える 2

5

私は今では、コンテキストの概念をよりよく理解していると思います。このトピックを明確にするために私が見つけたリンクを共有したいと思います。http://t.co/9R0bPWiKc5

于 2013-06-30T16:01:03.233 に答える
2

2番目の質問ですが、私が正しく理解していれば、コンテキストはある種のシングルトンのレジストリです。したがって、SQLiteOpenHelperは作成され、与えられたコンテキストに関連付けられます。このコンテキストを使用してSQLiteOpenHelperを取得するものはすべて、その関連付けられたインスタンスを取得します。

于 2014-02-24T13:55:52.760 に答える