Je suis un peu confus sur les fournisseurs de contenu. Si j'ai plusieurs activités dans ma demande, ils reçoivent chacun leur propre instance du fournisseur de contenu? C'est juste essentiellement une classe / interface? P>
Dans une activité, je vais avoir de nombreux threads écrivant simultanément à la base de données. Comment faire face à un fil d'écrire à la fois? P>
Est-ce que je viens d'attraper SqlitedatabasElockedException, placez le fil au sommeil puis réessayez? Ou y a-t-il une meilleure façon? P>
sont les verrouillages de base de données libérés lorsqu'une activité pause / est détruite? Si oui, pourrais-je simplement créer un verrou synchronisé contre le fournisseur de contenu lui-même? P>
3 Réponses :
Si vous utilisez un contenuProvider, je pense que vous ne vous souciez pas du nombre de fils de lecture / d'écriture: la plate-forme Android gère tous vos appels sur un seul fil et trier la synchronisation et le verrouillage. Vous venez d'ouvrir votre base de données et de lire / écrivez-y, et tout le monde parle à travers l'interface ContentProvider. P>
Documentations Android "Étant donné que ces méthodes de fournisseur de contenu peuvent être appelées à partir de divers objets du contenuSolver dans différents processus et threads, ils doivent être mis en œuvre sous une manière thread-sûre."
HM, réputation 50.5k et une telle réponse?
oups, j'ai perdu mon cookie d'utilisateur non enregistré afin de ne pas voter la réponse de Femi correcte. P>
La documentation http://developer.android.com/guide/ Sujets / fournisseurs / contenus-fournisseurs.html confirme cela avec "Lorsqu'une requête est initiée, le système Android identifie le fournisseur de contenu qui est la cible de la requête et s'assure qu'il est opérationnel. Le système instancie tous les objets du contenuSProvider; vous n'avez jamais besoin de le faire par vous-même. En fait, Vous ne traiterez jamais directement avec des objets de contenuProvider du tout. Typiquement, il n'ya généralement qu'une seule instance de chaque type de fichier de contenu. Mais il peut communiquer avec plusieurs objetsSolver d'objets dans différentes applications et processus. L'interaction entre les processus est géré par les classes conteneurResolver et ContentProvider. " p>
Si vous signalez votre question / réponse pour l'attention du modérateur et sélectionnez Autre, vous pouvez demander que les deux comptes soient fusionnés. Vous voudrez peut-être aussi envisager d'enregistrer :)
Si vous travaillez directement avec des bases de données et que vous avez plusieurs écrivains de différents threads, vous pouvez rencontrer des problèmes de concurrence. P>
Le Si vous n'exigeez pas que Android synchronise l'accès aux données sur le ContentProvider code> est accessible à partir de plusieurs programmes en même temps, vous devez donc mettre en œuvre le fil d'accès-coffre-fort. Le moyen le plus simple consiste à utiliser le mot-clé
synchronisé code> devant toutes les méthodes du
ContentProvider code>, de sorte qu'un seul thread puisse accéder à ces méthodes en même temps. P>
ContentProvider Code>, définissez le
Android: multiprocess = true code> attribut dans votre
Oui, il fait: docs.oracle.com/javase/tatuly/essential/ Concurrence / ...
Je ne comprends pas, donc si je ne définis pas MultiProCess = TRUE Android synchronisera tous les accès au contenu de contenu? Dans ce cas, il ne serait pas nécessaire d'utiliser le mot clé synchronisé, non? Dans ce cas, la réponse de FEMI est correcte?