2013-03-10 7 views
5

Ich bin neu in der Android-Entwicklung (zur allgemeinen Entwicklung, um ehrlich zu sein), und als solche habe ich Commonsware Busy Coders Leitfaden gelesen. Während ich den Abschnitt SQLite durchlese, gibt es einige Dinge, die mir nicht 100% klar sind. Unten ist, was ich glaube, passiert, sowie einige Fragen. Bitte korrigiere mich, wenn ich falsch in meinem Gedankenprozess bin.Entscheidung zwischen Aktivitätskontext oder Anwendungskontext zur Instantiierung von SQLiteOpenHelper

Der Autor schlägt vor, dass Sie, wenn Sie eine Datenbank aus mehr als nur einer Aktivität in Ihrer Anwendung verwenden, nicht die Kontextreferenz von jeder Aktivität verwenden sollten, um die SQLiteOpenHelper zu instanziieren. Stattdessen sollten Sie getApplicationContext() von Activity verwenden.

Dabei verwendet er die Tatsache, dass getApplicationContext() die Singleton-Instanz von Context abgerufen wird, die bald nach dem Start des Anwendungsprozesses erstellt wird. Hier kommt meine Frage auf. Ich denke, dass, wenn ich den von der Aktivität bereitgestellten Kontext (dieses Schlüsselwort) beim Instanziieren von SQLiteOpenHelper verwenden würde, jede Aktivität eine eigene Instanz von SQLiteOpenHelper erstellen würde. Es scheint mir, dass die Verwendung des Aktivitätskontextes den Anwendungskontext nicht darüber informiert, dass bereits eine Instanz des SQLiteHelper erstellt wurde, und somit ein neues erstellt, anstatt das vorhandene zu verwenden. Ist mein Denken richtig?

Ich denke an Kontext (und korrigieren Sie mich, wenn ich falsch liege) als Entwickler "Gateway", um Informationen und Ressourcen von Android OS (d. H. Erhalt eines Systemdienstes über getSystemService() erhalten). Aber dies zu tun, indem Sie dies (aus einer Aktivität) oder getApplicationContext() verwenden, hat unterschiedliche Auswirkungen. Wenn Sie dies verwenden, erhalten Sie eine Instanz von Context, die für Ihre aktuelle Aktivität "lokal" ist, aber die Verwendung der getApplicationContext() verweist auf die gesamte Anwendung. Wenn dies korrekt ist, bedeutet es, dass, wenn ich einen Verweis auf getApplicationContext() an den SQLiteOpenHelper Konstruktor übergeben wird es meine gesamte Anwendung wissen, dass es eine Instanz von meinem SQLiteOpenHelper bereits erstellt. Wie funktioniert SQLiteOpenHelper die Anwendung darüber informiert? verwendet es eine statische Methode wie public/private static dbCreated (Kontextkontext) {// Lassen Sie den Kontext wissen, dass es eine Instanz von running} gibt, um die Anwendung zu informieren?

Es tut mir leid, wenn das verwirrend ist.

Dank der Zeit voraus

+0

Was ist die Frage? – Neolisk

+0

Entschuldigung, wenn es verwirrend ist. Die Fragen sind am Ende des dritten und vierten Absatzes. – Emmanuel

+0

Es ist sicher. Ich suche eine Frage, die im Rahmen von SO beantwortet werden kann. Deines ist bisher zu weit gefasst. – Neolisk

Antwort

5

Ich denke nun ich ein besseres Verständnis des Begriffs Kontext verfügen. Ich möchte einen Link teilen, den ich gefunden habe, der dieses Thema verdeutlicht. http://t.co/9R0bPWiKc5

2

Zu Ihrer zweiten Frage, wenn ich es richtig verstehe, ist Context eine Art von Registry of Singletons. So SQLiteOpenHelper ist nur erstellt und an den Kontext gebunden. Alles, was diesen Kontext verwendet, um SQLiteOpenHelper zu erwerben, wird diese gebundene Instanz erhalten.

+0

Danke für die Info. +1. – Emmanuel

Verwandte Themen