web-dev-qa-db-fra.com

Quelle Android technique de stockage de données utiliser?

La documentation Android Android propose les options ci-dessous mais n'explique pas dans quelles circonstances chacune est la meilleure. Quels sont les avantages et les inconvénients de chaque méthode? Par exemple, dans quelles conditions SQL serait-il meilleur que les préférences partagées?

  • Préférences partagées
  • Stockage interne
  • Stockage externe
  • Bases de données SQLite
  • Connexion réseau
47
Declan McKenna

Différentes options de stockage dans Android

enter image description here


Fournisseurs de contenu

enter image description here

  • Considérez que les données structurées ajoutées à l'appareil depuis application1 ne sont pas accessibles à une autre application2 présente dans le même appareil mais la photo de profil ajoutée à l'appareil par application1 est disponible pour le application2 exécuté sur le même appareil

  • Considérez Android appareil comme ville, les applications sont les maisons de la ville, les gens dans les maisons (application) sont les données. Maintenant, le fournisseur de contenu est comme un courtier dans la ville (Android Ce courtier fournit un accès aux habitants de la ville pour trouver différentes maisons faisant référence en tant que fournisseur de contenu dans le Android appareil permet d'accéder aux données de l'appareil pour différentes applications.


Préférences partagées

enter image description here

  • Considérez que j'ai une application, par exemple une application Face Book que j'utilise pour me connecter à mon compte.

  • Maintenant, la toute première fois que j'entre mon nom d'utilisateur et mon mot de passe pour accéder à mon compte. Supposons que je me déconnecte de l'application une heure plus tard. J'utilise la même application Face book pour me reconnecter à mon application.

  • Je dois saisir à nouveau le nom d'utilisateur et le mot de passe pour me connecter à mon compte et définir un thème pour mon application et d'autres paramètres sur l'apparence de mon application sur mon téléphone actuel

  • Ce n'est pas nécessaire car considérez que j'utilise mon téléphone pour me connecter à l'application. Donc, je vais toujours utiliser mon téléphone pour me connecter encore et encore, donc saisir mes informations d'identification encore et encore est plus de travail montre que ce n'est pas une application conviviale

  • Les préférences partagées sont très pratiques dans de tels scénarios où je peux utiliser sa fonctionnalité pour partager mes données dans un fichier xml qui existe physiquement dans l'application Android installée sur mon téléphone qui n'est pas détruite même si l'application est fermé. Ici, nous pouvons enregistrer les données des préférences de l'utilisateur de l'application en cours.

  • Par conséquent, la prochaine fois que j'ouvre mon application sur mon téléphone, je peux voir les données automatiquement remplies dans les champs nécessaires et les paramètres sont


Stockage de fichiers

enter image description here

  • Dans Android nous pouvons utiliser l'espace de stockage de l'appareil pour y stocker les données pour les applications. Le type de données implique des choses telles qu'un fichier texte, un fichier image, un fichier vidéo, un fichier audio, etc.

  • Comme le montre la figure, nous pouvons voir qu'il y a deux endroits où nous pouvons le faire. Une façon consiste à écrire les fichiers bruts dans le stockage principal/secondaire. Une autre façon consiste à écrire les fichiers de cache dans le stockage principal/secondaire.

  • Il existe également une différence entre le stockage de données brutes et les données de cache, les données brutes une fois stockées en mémoire par l'utilisateur doivent être explicitement supprimées par l'utilisateur explicitement, sinon elles existeraient jusque-là. Les données de cache stockées en mémoire ne sont pas des données permanentes car le système les supprime automatiquement s'il sent qu'il y a un manque de mémoire.

enter image description here

Stockage interne:

  • Considérons qu'un utilisateur dans une application a stocké des données dans le stockage interne, alors seul cet utilisateur de cette application a accès à ces données sur le mobile et ces données sont automatiquement supprimées lorsque l'utilisateur désinstalle l'application. En parlant de la mémoire interne qui est privée.

  • Le répertoire de stockage interne des applications est stocké en utilisant le nom du package de nom dans un endroit spécial du système de fichiers Android.

  • Les autres applications ou utilisateurs de l'application actuelle n'ont pas accès au fichier défini par un utilisateur particulier et une application particulière, sauf s'il est explicitement mis à la disposition de l'utilisateur pour un accès en lecture/écriture.

enter image description here


SQLite

enter image description here

  • Sqlite est utilisé pour stocker des données plus structurées localement dans un mobile où l'application Android est en cours d'exécution. Les données structurées impliquent à partir de ce qui est montré dans la figure comme les informations d'un étudiant sous la forme de lignes et de colonnes.

  • Sqlite offre des fonctionnalités similaires comme Mysql et Oracle mais avec des fonctionnalités limitées. Certaines choses impliquent l'exécution d'opérations de requête sur les tables. Il existe des fonctionnalités comme la création de vues, mais certaines fonctionnalités ne sont pas disponibles comme la procédure stockée.

  • Sqlite est très utile pour stocker des données complexes et volumineuses qui peuvent être téléchargées une fois et peuvent être utilisées encore et encore jusqu'à ce que l'application soit en cours d'exécution. Lorsque l'application est fermée, la base de données sqlite est également détruite.


Assembler toutes les pièces

enter image description here

103
Devrath
  • Les préférences partagées sont bonnes pour stocker ... les préférences d'une application et d'autres petits morceaux de données. C'est un magasin de clés de chaîne persistante très simple pour quelques types de données: booléen, flottant, int, long et chaîne. Ainsi, par exemple, si mon application avait une connexion, je pourrais envisager de stocker la clé de session sous forme de chaîne dans SharedPreferences.
  • Stockage interne est bon pour stocker des données d'application auxquelles l'utilisateur n'a pas besoin d'accéder, car l'utilisateur ne peut pas accéder facilement au stockage interne. Peut-être bon pour la mise en cache, les journaux, etc. Tout ce que seule l'application a l'intention de créer, de mettre à jour ou de supprimer.
  • stockage externe. Idéal pour l'opposé de ce que je viens de dire. L'application dropbox utilise probablement un stockage externe pour stocker le dossier dropbox de l'utilisateur, afin que l'utilisateur ait un accès facile à ces fichiers en dehors de l'application dropbox, par exemple, en utilisant le gestionnaire de fichiers.

  • SQLite les bases de données sont excellentes chaque fois que vous allez utiliser beaucoup de données structurées et un schéma relativement rigide pour les gérer. En termes simples, SQLite est comme MySQL ou PostgreSQL sauf qu'au lieu de la base de données agissant comme un démon serveur qui prend ensuite les requêtes des scripts CGI comme php, il est simplement stocké dans un fichier .db, et accessible et interrogé via une simple bibliothèque dans l'application. Bien que SQLite ne puisse pas évoluer presque aussi grand que les bases de données dédiées, il est très rapide et pratique pour les petites applications, comme les applications Android. J'utiliserais une base de données SQLite si je faisais une application pour agréger et télécharger des recettes, car ce type de données est relativement structuré et une base de données lui permettrait de bien évoluer. Les bases de données sont agréables car écrire toutes vos données dans un fichier, puis les analyser dans votre propre format propriétaire, ce n'est pas amusant. , stocker des données en XML ou JSON ne serait pas si mal.

  • Connexion résea fait référence au stockage de données sur le cloud. Le transfert de fichiers et de contenu HTTP ou FTP via les packages Java.net. * Rend cela possible.

36
Teddy

SharedPreferences est principalement destiné aux paramètres spécifiques à l'application auxquels vous pouvez accéder via votre menu Paramètres - comme les paramètres d'application. C'est une bonne idée de garder tout simple ici - principalement des drapeaux booléens, des chaînes courtes ou des entiers. Les données SharedPreferences persistent au redémarrage de l'appareil et sont supprimées avec la désinstallation de l'application. Les données sont enregistrées sous forme de paire clé-valeur.

Le stockage interne est principalement utilisé pour un stockage de données non persistant plus important. Vous utilisez le stockage interne si vous voulez traiter une image, un court clip vidéo, un gros fichier texte, etc. Mais vous ne stockez pas les données traitées dans le stockage interne - sa fonction est plus comme la RAM d'un CPU. La quantité de stockage interne disponible pour votre application dépend de l'appareil, mais c'est toujours une bonne idée de garder quoi que ce soit sous 1 Mo. Les données sont référencées via son chemin de fichier.

Le stockage externe ne fait pas seulement référence au stockage SDCard, mais pour les téléphones haut de gamme, cela peut signifier un stockage interne montable (comme dans le Galaxy Nexus ou S2 ). C'est là que vous stockez les fichiers vidéo volumineux, les images haute résolution et le fichier texte de 20 mégaoctets que vous souhaitez analyser dans votre application. C'est également un endroit pour stocker les données que vous souhaitez partager sur plusieurs appareils si vous échangez des cartes SD. Les données sont également référencées via son chemin de fichier.

Les bases de données SQLite sont l'endroit où vous stockez à peu près tout ce que vous voulez dans une base de données régulière - avec l'avantage d'organiser les choses en tableaux, lignes et colonnes. Il fonctionne mieux avec les éléments que vous souhaitez afficher dans l'interface utilisateur sous forme de listes - le meilleur exemple serait la grande invention connue sous le nom de CursorAdapter. Les données stockées ici persistent également au redémarrage de l'appareil et sont supprimées lors de la désinstallation de l'application. Vous pouvez également partager des données entre des applications avec sqlite db si vous les connectez à un ContentProvider. Les données sont accessibles à l'aide d'un curseur , où vous pouvez appeler des méthodes comme si vous exécutiez des instructions sql.

La connexion réseau n'est pas vraiment une technique de stockage de données, mais peut être un moyen de conserver des données pour un utilisateur spécifique à condition que l'appareil soit connecté à Internet, en utilisant une sorte d'authentification. Vous devez trouver un équilibre entre le téléchargement de données chaque fois que l'application en a besoin ou une synchronisation de données unique, ce qui conduirait finalement à une autre des options de stockage mentionnées ci-dessus.

16
josephus

Les préférences partagées sont des paires clé/valeur, rien de plus. Donc, si vous voulez garder une trace de, par exemple, les étudiants et leur score au test, cela ne fonctionnera vraiment pas bien pour cela.

Une base de données n'est rien d'autre qu'une base de données. Vous pouvez définir autant de colonnes (et de tableaux) que nécessaire pour effectuer le travail.

Si ce sont des préférences pour votre application, utilisez des préférences partagées (presque toutes les préférences auxquelles je peux penser peuvent être faites de cette façon), si c'est autre chose plus compliqué, utilisez une base de données.

4
Barak