2013-03-10 1 views
5

私はAndroid開発の初心者です(開発全体が率直になるため)、Commonsware Busy Coderのガイドを読んでいます。 SQLiteのセクションを読んでいるうちに、%100でないことがわかります。以下は私がいくつかの質問と同様に進んでいると信じているものです。私の思考プロセスに間違っている場合は、私を修正してください。アクティビティコンテキストまたはアプリケーションコンテキストを決定してSQLiteOpenHelperをインスタンス化する

アプリケーション内の1つ以上のアクティビティからデータベースを使用する場合は、各アクティビティのContextリファレンスを使用してSQLiteOpenHelperをインスタンス化しないでください。代わりに、Activityによって提供されるgetApplicationContext()を使用する必要があります。

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

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

これが混乱している場合は、ごめんなさい。

おかげで事前に

+0

問題は何ですか? – Neolisk

+0

ご迷惑をおかけして申し訳ありません。質問は3番目と4番目の段落の最後にあります。 – Emmanuel

+0

それは確かです。私は、SOの範囲内で答えることができる質問を探しています。あなたのものはそれまでは広すぎます。 – Neolisk

答えて

5

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

2

2番目の質問には、私が正しく理解すれば、コンテキストはなんらかの種類のRegistry of Singletonsです。したがってSQLiteOpenHelperは作成され、与えられたコンテキストに関連付けられます。このコンテキストを使用してを取得すると、SQLiteOpenHelperはそのインスタンスを取得します。

+0

ありがとうございます。 +1。 – Emmanuel