Votre appareil android dispose de nombreuses bases de données, dont chacun est identifié par un Contenu unique Autorité. C'est le "nom de domaine" partie équivalente dans le contenu:// uri-tout avant de la première barre oblique.
ContentResolver
stocke les données et de fournir une cartographie de l' String contentAuthority
de ContentProvider
. Lorsque vous appelez ContentResolver.query()
ou update()
ou qu'avez-vous, l'URI est analysée à l'écart, dans ses composantes, la contentAuthority chaîne est identifiée, et contentResolver a pour lancer une recherche cartographique pour une chaîne correspondante, et de diriger les requêtes vers le bon fournisseur. Ce cher recherche se produit lors de chaque appel, parce que l'URI peut être différent d'un appel à l', avec un autre contentAuthority. En outre, il peut y avoir certains coûts liés à la création et à la déchirure en bas d'une connexion au fournisseur -- Il ne peut pas être réutilisées dans d'appels. Je ne suis pas sûr de la surcharge impliqué là-bas, c'est une assez profonde au niveau de l'OS de code.
En revanche, lorsque vous appelez acquireContentProviderClient(authority)
, que "le prestataire de ai-je besoin?" recherche est effectuée une fois, et vous êtes donné un ContentProviderClient
, ce qui est essentiellement un lien direct vers l' ContentProvider
. (Il y a un peu de colle entre vous et le fournisseur qui implique de la croix-fil de la communication et de la simultanéité de verrouillage). Toutefois, lorsque vous utilisez ContentProviderClient
, vous vous adressez directement au Fournisseur pour l'autorité que vous avez demandé. Cela supprime les déchets de constamment re-calcul "le fournisseur qui je veux?"
REMARQUE: Par acquireContentProviderClient() documentation: Si vous obtenez un ContentProviderClient, "L'appelant doit indiquer qu'ils sont fait avec le fournisseur en appelant ContentProviderClient.release() qui va permettre au système afin de libérer le fournisseur, il détermine qu'il n'y a pas d'autre raison pour la garder active." Donc, essentiellement, en laissant un rassis Client ouvert, il peut forcer le Fournisseur pour continuer à fonctionner comme un service en arrière-plan. Donc, n'oubliez pas de nettoyer!
Résumé:
De nombreux appels à divers contentAuthorities: Utiliser ContentResolver
.
Des appels répétés à la même Autorité: Obtenir et utiliser ContentProviderClient
. N'oubliez pas de release() lorsque vous avez terminé.