Pourquoi ContentProvider d'Android a-t-il été créé?

11

Le titre résume ma question, mais pour élaborer essentiellement ce que je veux comprendre, c'est pourquoi les concepteurs Android veulent que les applications qui doivent travailler avec des données partagées utilisent un fournisseur de contenu plutôt que d'accéder simplement à la base de données SQLite directement?

La seule raison pour laquelle je peux penser est la sécurité car certains fichiers ne peuvent être accessibles que par certains processus et de cette manière, le fournisseur de contenu est le contrôleur d'accès qui garantit que chaque application dispose des privilèges appropriés avant d'autoriser l'accès en lecture et / ou en écriture au fichier de base de données. Est-ce la principale raison pour laquelle ContentProvider a été créé?

satur9nine
la source

Réponses:

6

C'est avant tout un moyen d'isoler les consommateurs et les fournisseurs de données. Vous développez votre propre fournisseur de contenu ou étendez un fournisseur existant si vous souhaitez rendre certaines de vos données publiques ou au moins disponibles pour d'autres applications.

Certes, ce serveur peut contrôler les accès d'un point de vue de la sécurité, mais il vous permet également de retravailler l'implémentation physique de vos données quand vous le souhaitez. Tout ce que vous devez faire est d'adapter le back-end de votre fournisseur de contenu dans ce cas. Les applications de consommation de données ne devront pas être réécrites. Ils continueront à accéder à vos données via leur résolveur de contenu sans avoir connaissance de tout changement dans l'implémentation sous-jacente réelle.

De plus, Android n'instanciera qu'une seule instance de votre fournisseur de contenu, même si plusieurs clients accèdent aux données, de sorte qu'il se chargera des accès simultanés sans que vous ayez à vous en préoccuper.

Enfin, je crois qu'il va également gérer la corvée de démarrage et d'arrêt propres.

Alain Pannetier
la source
1
Je pense que l'isolation est probablement la meilleure réponse. Je ne suis pas d'accord avec votre point sur l'accès simultané, SQLite et l'interface Java Android gèrent la concurrence, ContentProvider lui-même permet à plusieurs threads simultanés d'interroger / insérer / mettre à jour de sorte qu'il ne fait vraiment rien pour vous.
satur9nine
3

Le ContentProviderrésume également toutes les communications inter-processus nécessaires pour communiquer avec d'autres applications tierces. Devoir écrire ce code vous-même serait une énorme douleur.

Alex Lockwood
la source
Les tiers peuvent toujours accéder directement au fichier de base de données, aucune communication inter-processus n'est nécessaire.
satur9nine
Je ne sais pas trop ce que vous voulez dire ... si une application est un "tiers", par définition, elle doit exister dans un processus différent (puisque chaque application Android a son propre processus principal). De plus, si le système d'exploitation Android vous permettait d'avoir un accès direct aux magasins de données brutes d'autres applications, cela poserait de très gros problèmes de sécurité.
Alex Lockwood,
1

ContentProvider est également une abstraction qui cache les détails de la façon dont les données sont stockées / générées. Par exemple, dans l'une de mes applications, j'ai un fournisseur de contenu qui renvoie des images PNG. Ces images ne sont stockées nulle part, elles sont générées à la demande.

Dan Dyer
la source