497 votes

Ce qui ' la différence entre commit() et apply() dans les préférences partage

J’utilise de préférence partagée dans mon application android. J’utilise les deux et méthode de préférence partagée. Lorsque j’utilise AVD 2.3 il n’affiche aucune erreur, mais lorsque je lance le code AVD 2.1, méthode affiche erreur. ALORS, quelle est la différence entre ces deux ? Et en utilisant seulement puis-je stocker la valeur de préférence sans aucun problème ?

725voto

Ray Britton Points 1312

apply() a été ajouté dans le paragraphe 2.3, il s'engage sans retourner une valeur booléenne indiquant le succès ou l'échec.

commit() retourne true si l'enregistrement des œuvres, false sinon.

apply() a été ajouté que l'android dev team remarqué que plus personne n'a pas pris l'avis de la valeur de retour, si la demande est plus rapide mais il asynchrone.

http://developer.android.com/reference/android/content/SharedPreferences.Editor.html#apply()

264voto

Lukas Knuth Points 14042

À partir de la SharedPreferences.L'Éditeur De Documentation:

À la différence de commit(), qui écrit son préférences pour le stockage persistant de manière synchrone, appliquer() s'engage à mettre son les changements dans la mémoire SharedPreferences immédiatement, mais commence asynchrone s'engager à disque et vous ne serez pas averti de tout les échecs. Si un autre éditeur sur cette SharedPreferences procède régulièrement à un commit (), tandis qu'un apply() est encore en circulation, le commit() bloquera jusqu'à ce que tous async s'engage sont terminées ainsi que de la commettre lui-même.

Comme SharedPreferences instances sont les singletons au sein d'un processus, c'est sûr pour remplacer toutes les instances de commit() avec apply() si vous étiez déjà ignorant la valeur de retour.

Les SharedPreferences.Interface de l'éditeur n'est pas prévu pour être mis en œuvre directement. Toutefois, si vous avez déjà a mettre en œuvre et sont en train de les erreurs sur le manque de appliquer(), vous pouvez appelez simplement commit() de appliquer().

26voto

JoseLSegura Points 858

Je rencontre quelques problèmes à l'aide de appliquer() au lieu commit(). Comme indiqué précédemment dans d'autres réponses, l'appliquer() est asynchrone. Je reçois le problème que les modifications de formé à une "chaîne de la valeur" dans les préférences ne sont jamais écrits à la persistance de la mémoire.

Il arrive si vous "force de détention" du programme, ou, dans la ROM que j'ai installé sur mon appareil avec Android 4.1, lorsque le processus est tué par le système en raison de la mémoire de première nécessité.

Je recommande d'utiliser "commit()" au lieu de "s'appliquent()" si vous voulez que vos préférences en vie.

15voto

MurWade Points 69

Utiliser apply().

Il écrit les modifications dans la RAM immédiatement et attend et l’écrit dans la mémoire interne (le fichier de préférences réelles) après. Commit écrit les modifications de façon synchrone et directement dans le fichier.

13voto

Mojo Risin Points 5471

Les docs donner assez bonne explication quelle est la différence entre appliquer() et commit().

À la différence de commit(), qui écrit ses préférences pour le stockage persistant de manière synchrone, appliquer() engage ses changements à la mémoire SharedPreferences immédiatement, mais commence asynchrone s'engager à disque et vous ne serez pas averti de tous les échecs. Si un autre éditeur sur cette SharedPreferences procède régulièrement à un commit (), tandis qu'un apply() est toujours en suspens, le commit() bloque jusqu'à ce que tous async commits sont achevées ainsi que de la commettre lui-même. Comme SharedPreferences les instances sont des singletons dans un processus, il est recommandé de remplacer toutes les instances de commit() avec() si vous étiez déjà en ignorant la valeur de retour.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X