web-dev-qa-db-fra.com

Préférences partagées "limite"

Je sais qu'une question similaire à celle-ci a été posée à plusieurs reprises, et en parcourant SO j'ai partiellement trouvé une réponse, mais pas complète, et Android docs don Je ne sais vraiment pas comment ils fonctionnent et j'ai utilisé des préférences partagées plusieurs fois auparavant, mais je me demande à quel point (combien) c'est trop, j'ai lu que les gens avaient ~ 100 Ko stockés sans aucun problème. Longue histoire court - Quelqu'un a-t-il réellement eu des problèmes avec trop de données stockées dans les préférences partagées et quel était le problème, les données sont-elles supprimées ou?

** ce n'est qu'une question par curiosité, j'ai déjà mes grandes valeurs stockées dans SQL DB, je me demandais juste ce qui serait et s'il y aurait des problèmes si quelqu'un pour une raison quelconque stockait tout dans les préférences partagées

32
Marko Niciforovic

Étant donné que SharedPreferences est stocké dans un fichier XML et qu'il manque donc la prise en charge des transactions de SQLite, je ne recommanderais pas de stocker "100KBS" dans SharedPreferences.

Cela étant dit, la limite de taille la plus basse que je connaisse sera votre quantité d'espace de stockage libre, car SharedPreferences lit le contenu de ce fichier XML entier en mémoire.

44
CommonsWare

En lisant votre question, je pense que vous ne devriez pas utiliser SharedPreferences, car (a) elles sont destinées à stocker des quantités de données beaucoup plus petites (d'où l'utilisation de XML), et (b) il existe de nombreuses alternatives simples.

La seule chose "spéciale" à propos de SharedPreferences est l'intégration avec l'activité Préférences pour montrer vos préférences à l'utilisateur, et cela n'est probablement pas applicable dans votre cas en fonction du montant que vous prévoyez de stocker. (Oh, le SharePreferences gère également les problèmes de concurrence pour vous.)

Vous pouvez utiliser la sérialisation de Java pour stocker des classes de préférence dans des fichiers binaires. Ceux-ci seraient considérablement plus petits que PreferenceFile comparables et peuvent facilement être transmis via GZIPInputStream pour le rendre plus petit (ou CipherInputStream) pour le crypter. J'ai trouvé que cette alternative était un moyen puissant, simple et multiplateforme de stocker des données d'application là où la puissance de SQLite n'est pas nécessaire.

(Désolé, ce n'est pas une réponse directe.)

10
Tom

Il existe des limites aux données SharedPreference. Dans mon cas, il déclenche une exception de mémoire lorsque les données SharedPreference franchissent 1428,51 ko.

Il est donc préférable d'utiliser la base de données SQLite lorsque vous avez besoin d'énormes données à stocker.

10
mani