Perché è stato creato ContentProvider di Android?


11

Il titolo riassume la mia domanda, ma per elaborare sostanzialmente ciò che voglio capire è perché i progettisti Android vogliono app che devono lavorare con dati condivisi per utilizzare un provider di contenuti piuttosto che accedere direttamente al database SQLite?

L'unica ragione a cui riesco a pensare è la sicurezza perché è possibile accedere a determinati file solo a determinati processi e in tal modo Content Provider è il gatekeeper che garantisce a ciascuna app i privilegi adeguati prima di consentire l'accesso in lettura e / o scrittura al file del database. È questo il motivo principale per cui ContentProvider è stato creato?

Risposte:


6

È soprattutto un modo per isolare i consumatori e i fornitori di dati. Sviluppa il tuo fornitore di contenuti o ne estendi uno esistente se vuoi rendere pubblici alcuni dei tuoi dati o almeno disponibili ad altre applicazioni.

È vero che questo server può controllare gli accessi dal punto di vista della sicurezza, ma consente anche di rielaborare l'implementazione fisica dei dati ogni volta che lo si desidera. Tutto quello che devi fare è adattare il back-end del tuo fornitore di contenuti in quel caso. Le applicazioni di consumo dei dati non dovranno essere riscritte. Continueranno ad accedere ai tuoi dati attraverso il loro risolutore di contenuti ignari di eventuali cambiamenti nell'implementazione sottostante effettiva.

Inoltre, Android creerà un'istanza di una sola istanza del tuo provider di contenuti anche se i dati accedono a più client in modo da occuparsi degli accessi simultanei senza che tu debba preoccupartene.

Infine, credo che gestirà anche il lavoro di avvio e spegnimento pulito.


1
Penso che l'isolamento sia probabilmente la risposta migliore. Non sono d'accordo con il tuo punto sull'accesso simultaneo, SQLite e l'interfaccia Java Android gestiscono la concorrenza, ContentProvider stesso consente a più thread simultanei di interrogare / inserire / aggiornare, quindi non fa davvero nulla per te.
satur9nine,

3

Il ContentProviderastrae inoltre tutte le comunicazioni tra processi che è necessario per comunicare con altre applicazioni di terze parti. Dover scrivere questo codice da solo sarebbe un grande dolore.


Le terze parti possono sempre accedere direttamente al file del database, senza che sia necessaria alcuna comunicazione tra processi.
sabato 9

Non sono sicuro di cosa intendi ... se un'app è una "terza parte", allora per definizione deve esistere in un processo diverso (poiché ogni app Android ha il suo processo principale). Inoltre, se il sistema operativo Android ti consentisse di avere accesso diretto agli archivi di dati grezzi di altre applicazioni, ciò solleverebbe alcuni problemi di sicurezza piuttosto grandi.
Alex Lockwood,

1

ContentProvider è anche un'astrazione che nasconde i dettagli di come i dati vengono archiviati / generati. Ad esempio, in una delle mie app ho un fornitore di contenuti che restituisce immagini PNG. Queste immagini non sono memorizzate da nessuna parte, sono generate su richiesta.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.