Warum wurde der ContentProvider von Android erstellt?

11

Der Titel fasst meine Frage zusammen, aber um im Grunde zu erläutern, was ich verstehen möchte, ist, warum die Android-Designer Apps möchten, die mit gemeinsam genutzten Daten arbeiten müssen, um einen Inhaltsanbieter zu verwenden, anstatt nur direkt auf die SQLite-Datenbank zuzugreifen.

Der einzige Grund, an den ich denken kann, ist die Sicherheit, da auf bestimmte Dateien nur über bestimmte Prozesse zugegriffen werden kann. Auf diese Weise ist der Inhaltsanbieter der Gatekeeper, der sicherstellt, dass jede App über die richtigen Berechtigungen verfügt, bevor Lese- und / oder Schreibzugriff auf die Datenbankdatei gewährt wird. Ist das der Hauptgrund, warum ContentProvider erstellt wurde?

gesättigt neun
quelle

Antworten:

6

Es ist vor allem eine Möglichkeit, Datenkonsumenten und Datenanbieter zu isolieren. Sie entwickeln Ihren eigenen Inhaltsanbieter oder erweitern einen vorhandenen, wenn Sie einige Ihrer Daten veröffentlichen oder zumindest für andere Anwendungen verfügbar machen möchten.

Dies kann zwar Server zur Steuerung von Zugriffen unter Sicherheitsgesichtspunkten verwenden, ermöglicht es Ihnen jedoch auch, die physische Implementierung Ihrer Daten jederzeit zu überarbeiten. In diesem Fall müssen Sie lediglich das Back-End Ihres Inhaltsanbieters anpassen. Die Datenkonsumentenanwendungen müssen nicht neu geschrieben werden. Sie greifen weiterhin über ihren Content Resolver auf Ihre Daten zu, ohne dass sich Änderungen an der tatsächlich zugrunde liegenden Implementierung ergeben.

Außerdem instanziiert Android nur eine Instanz Ihres Inhaltsanbieters, selbst wenn mehrere Clients auf die Daten zugreifen, sodass gleichzeitige Zugriffe möglich sind, ohne dass Sie sich darum kümmern müssen.

Schließlich glaube ich, dass es auch die Plackerei des sauberen Startens und Herunterfahrens bewältigen wird.

Alain Pannetier
quelle
1
Ich denke, die Isolierung ist wahrscheinlich die beste Antwort. Ich stimme Ihrem Standpunkt zum gleichzeitigen Zugriff nicht zu. SQLite und die Android-Java-Oberfläche übernehmen die Parallelität. ContentProvider selbst ermöglicht das gleichzeitige Abfragen / Einfügen / Aktualisieren mehrerer Threads, sodass nichts für Sie getan wird.
Samstag,
3

Das ContentProviderabstrahiert auch die gesamte prozessübergreifende Kommunikation, die für die Kommunikation mit anderen Anwendungen von Drittanbietern erforderlich ist. Diesen Code selbst schreiben zu müssen, wäre ein großer Schmerz.

Alex Lockwood
quelle
Dritte konnten immer direkt auf die Datenbankdatei zugreifen, ohne dass dort eine Kommunikation zwischen Prozessen erforderlich war.
Samstag, 19.
Ich bin mir nicht sicher, was du meinst ... Wenn eine App ein "Drittanbieter" ist, muss sie per Definition in einem anderen Prozess existieren (da jede Android-App ihren eigenen Hauptprozess hat). Auch wenn das Android-Betriebssystem Ihnen direkten Zugriff auf die Rohdatenspeicher anderer Anwendungen ermöglicht, würde dies einige ziemlich große Sicherheitsprobleme aufwerfen.
Alex Lockwood
1

ContentProvider ist auch eine Abstraktion, die die Details der Speicherung / Generierung der Daten verbirgt. In einer meiner Apps habe ich beispielsweise einen Inhaltsanbieter, der PNG-Bilder zurückgibt. Diese Bilder werden nirgendwo gespeichert, sondern bei Bedarf generiert.

Dan Dyer
quelle