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 ?
Réponses
Trop de publicités?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()
À 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().
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.
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.