2013-01-16 7 views
7

Ich bin neu in Andriod Domain und ist in der Lernphase. Ich habe ein paar Fragen:ContentResolver Verwendung

Haben wir einzelne ContentResolver-Objekt pro App? Ist es ein Singleton-Objekt? Wer verwaltet diesen Objektlebenszyklus? Wenn es Singleton ist, wie behandelt es mehrere Anforderungen der Abfrage eines ContentProvider?

Antwort

14

Von Alex Lockwood Blog - http://www.androiddesignpatterns.com/2012/06/content-resolvers-and-content-providers.html

Was der Inhalt Resolver ist?

Der Inhalt Resolver ist die einzige globale Instanz in Ihrer Anwendung, die Zugriff auf Ihre (und andere Anwendungen) Anbieter Inhalte zur Verfügung stellt. Der Content Resolver verhält sich genau so, wie sein Name impliziert: Er akzeptiert Anfragen von Clients und löst diese Anfragen , indem er sie an den Content Provider mit einer bestimmten Autorität weiterleitet. Um dies zu tun, speichert der Content Resolver eine Zuordnung von Behörden zu Content Provider. Dieses Design ist wichtig, da es einen einfachen und sicheren Zugriff auf die Content Provider anderer Anwendungen ermöglicht. Der Content Resolver enthält die CRUD-Methoden , die den abstrakten Methoden (Einfügen, Löschen, Abfragen, -Update) in der Klasse Content Provider entsprechen. Der Content Resolver kennt nicht die Implementierung der Content Provider, mit denen er interagiert mit (noch muss es wissen); Für jede Methode wird ein URI übergeben, der den Inhaltsanbieter angibt, mit dem er interagieren soll.

Was ist ein Inhaltsanbieter?

Der Inhalt Resolver eine Abstraktion von der Content-Provider der Anwendung bietet, Content Provider stellt eine Abstraktion von der zugrunde liegenden Datenquelle (das heißt eine SQLite-Datenbank). Sie bieten Mechanismen zum Definieren der Datensicherheit (d. H. Durch Erzwingen von Lese-/Schreibberechtigungen ) und bieten eine Standardschnittstelle, die Daten in einem Prozess mit Code verbindet, der in einem anderen Prozess ausgeführt wird.

Content Provider bieten eine Schnittstelle für die Veröffentlichung und raubend Daten, auf Basis eines einfachen Modells URI-Adressierung den Inhalt mit: // Schema. Sie ermöglichen es Ihnen, Ihre Anwendungsschichten von den zugrunde liegenden Datenschichten zu entschärfen, so dass Ihre Anwendung Datenquelle agnostisch durch Abstrahieren der zugrunde liegenden Datenquelle.

Das Leben einer Abfrage

Also, was ist genau der Schritt-für-Schritt-Prozess hinter einer einfachen Abfrage? Wie oben beschrieben, wenn Sie Daten aus Ihrer Datenbank über den Content Provider abfragen, kommunizieren Sie nicht direkt mit dem Provider. Stattdessen verwenden Sie das Content Resolver-Objekt, um mit dem -Provider zu kommunizieren.

  • Ein Aufruf getContentResolver().query(Uri, String, String, String, String) wird: Die spezifische Abfolge von Ereignissen, die auftreten, wenn eine Abfrage gemacht wird, ist unten angegeben. Der Aufruf ruft die Abfrage
    des Content Resolvers auf, nicht die ContentProvider's.

  • Wenn die Methode query aufgerufen wird, analysiert der Inhaltslöser das Argument uri und extrahiert seine Berechtigung.

  • Der Content-Resolver leitet die Anfrage an den Content-Provider, der bei der (eindeutigen) Behörde registriert ist. Dies geschieht durch Aufruf der Methode
    des Inhaltsanbieters query.

  • Wenn die Methode Content Provider's query aufgerufen wird, wird die Abfrage ausgeführt, und ein Cursor wird zurückgegeben (oder eine Ausnahme wird ausgelöst). Das resultierende Verhalten hängt vollständig von der
    Implementierung des Inhaltsanbieters ab.

Verwandte Themen