J'ai fait de la programmation de base de données SQLite pour Android, mais je ne sais rien sur Content-Provider sauf ceci: "Comme je l'ai mentionné la page des développeurs Android, Android SDK a expliqué le" Content-provider "car il est utilisé pour stocker et récupérer des données."
Mais alors,
- Quelle est la différence exacte entre "Content-Provider" et "SQLite Database"?
- Quelle est la meilleure solution pour stocker des données, quand?
Tout exemple ou aide !!
la source
ContentProvider
est une façade - une API que vous pouvez implémenter qui expose les bases de données à d'autres processus. Il peut être implémenté de manière à ce que les données soient stockées dans une base de données SQLite, mais ce n'est pas obligatoire.Il est impossible de répondre dans l'abstrait. De manière générale, à moins que quelque chose ne vous oblige à utiliser a
ContentProvider
, utilisez simplement une base de données.la source
J'ai créé de nombreuses bonnes applications avec des milliers d'utilisateurs qui utilisaient simplement des méthodes SQLite. Mais c'était il y a quelque temps et j'ai dû écrire manuellement beaucoup de code qui peut maintenant être facilement pris en charge par ContentProvider. À l'époque, je n'étais pas favorable à l'utilisation de fournisseurs de contenu, car cela ne faisait qu'ajouter de la complexité au code.
Cependant, au cours des dernières années, au fur et à mesure qu'Android a évolué, je suis passé à ContentProvider car cela vous fait gagner du temps et vous permet d'en faire plus. Je l'utilise maintenant beaucoup. Une fois que vous avez rédigé un cours de fournisseur de contenu, votre vie devient beaucoup plus facile. Avec ContentProvider, je peux très facilement gérer les chargeurs de curseur, les rappels de chargeur et les insertions en masse pour lesquels j'ai dû tout écrire manuellement dans le passé et cela ne fonctionnait toujours pas aussi efficacement. Surtout lors de la mise à jour de la vue de liste, qui est désormais automatiquement mise à jour grâce à une seule méthode notifychange (). Cela signifie que je n'ai plus à taper mes propres écouteurs et à mettre à jour manuellement le contenu dans les vues de liste et les adaptateurs. De plus, je n'ai pas besoin de m'inquiéter de l'ouverture et de la fermeture des bases de données ou des fuites de mémoire. Tout cela est géré par le fournisseur de contenu. Le seul problème auquel je suis confronté de temps en temps est que vous ne pouvez pas faire des requêtes complexes dans ContentProviders. Dans ce cas, vous pouvez toujours utiliser des requêtes brutes et utiliser l'interaction manuelle à l'ancienne avec sqlite.
Si vous avez déjà écrit vos propres DbAdapter, Helper et Observer, vous pouvez les transférer en toute sécurité vers vos nouvelles applications sans perdre de temps à tout convertir en ContentProvider. Mais sur la base de mon expérience, je recommande vivement de passer à ContentProvider. Il faudra du temps pour s'y habituer, mais une fois que vous en aurez l'expérience, vous resterez avec.
MISE À JOUR 2017 Je suis maintenant passé à Realm , une bien meilleure façon d'utiliser les bases de données sur n'importe quelle plate-forme. Passez quelques heures à l'apprendre et gagnez d'innombrables heures dans votre carrière de développement d'applications.
la source
1. Les fournisseurs de contenu ne sont pas sûrs pour les threads
Par défaut, les fournisseurs de contenu ne sont pas thread-safe. Si vous avez plusieurs threads utilisant un fournisseur de contenu, vous pouvez voir de nombreuses exceptions différentes levées et d'autres incohérences de données. Le moyen le plus simple de résoudre ce problème consiste à utiliser le mot clé synchronized sur chacune des méthodes publiques exposées par le fournisseur de contenu.
De cette manière, un seul thread à la fois peut accéder à ces méthodes.
2. Jouez bien lorsque vous écrivez beaucoup
J'ai le besoin dans la nouvelle application Serval Maps d'importer des données de fichiers binaires dans la base de données utilisée en interne par l'application. Pour ce faire et jouer bien avec le reste de l'application, il est préférable de:
Créez un nouveau thread pour entreprendre l'importation afin que les autres threads ne soient pas affectés, en particulier le thread en charge de la mise à jour de l'interface utilisateur; et Pause brièvement à la fin de chaque importation pour donner plus de chance aux autres threads qui ont besoin d'utiliser les méthodes synchronisées.
3. Les fournisseurs de contenu vous obligent parfois à penser latéralement
La façon dont les fournisseurs de contenu dans Android fonctionnent est de fournir une couche d'abstraction entre le reste de votre code et la base de données sous-jacente. Cela est principalement dû au fait, pour autant que je sache, que les fournisseurs de contenu peuvent accéder aux données à partir d'endroits autres que les bases de données.
Cela signifie que vous ne pouvez pas exécuter de requêtes SQL brutes sur la base de données sous-jacente et que vous devez spécifier les différents composants d'une requête SQL à l'aide de variables transmises aux différentes méthodes telles que la méthode de requête. Si vous avez une tâche qui ne correspond pas à la manière dont SQL est géré par un fournisseur de contenu, vous avez deux options:
Pensez latéralement à la requête, vous pouvez peut-être obtenir les données dont vous avez besoin par des requêtes alternatives et en accédant aux résultats à partir du curseur; et Utilisez un URI pour accéder aux données normalement et un URI spécial qui correspond à une requête spécifique pour les tâches qui n'ont pas d'alternatives.
la source
Les fournisseurs de contenu sont utilisés lorsque vous souhaitez partager vos données entre les applications.
Si vous avez une base de données attachée à une application et que vous souhaitez qu'une autre application utilise certaines données, vous pouvez implémenter un fournisseur de contenu qui expose les données
la source
La principale différence est la suivante: lorsque votre application doit partager des informations avec une autre application, utilisez Content-Provider. SQLite ne stocke que les données de l'application qui la crée
la source
J'ai lu cette réponse en cherchant le même doute, alors j'ai pensé à la partager. il est dit -
Donc, utiliser un fournisseur de contenu serait une bonne idée.
la source
Pensez aux systèmes de gestion de contenu avancés. Chaque objet (page, image, article d'actualité, élément d'événement, etc.) a un contenu, une adresse, des autorisations utilisateur et des moyens d'interagir avec lui à partir de différentes parties du système. Les fournisseurs de contenu le font pour Android. Vous pouvez désormais partager des fichiers ou des images que vous avez peut-être stockés dans votre application. Vous pouvez également créer des objets partageables personnalisés, tels que des contacts commerciaux, des notes modifiables, etc. Et spécifier la sécurité et l'application par défaut pour traiter ces objets lorsque vous les ouvrez à partir de toute autre application.
la source
Une différence est que les fournisseurs de contenu prennent en charge la plate-forme pour les observateurs de contenu. Vous allez devoir implémenter votre propre modèle Observable pour une base de données SQLite.
Comment ré-interroger automatiquement avec LoaderManager
ContentObserver pour SQLite?
la source