Question

Mon application utilise beaucoup d'images qui sont téléchargées sur Internet et mises en cache sur le téléphone Android localement. Je me demande, quelle est la bonne façon de sauvegarder ces images. Il y a plusieurs façons que je vois, qui ne sont pas entièrement satisfaisant.

Enregistrez-les sur la carte SD dans un dossier public

  • Utilise l'espace qui sera libéré lors de la désinstallation wont
  • L'utilisateur peut voir les photos dans la galerie
  • a besoin d'un dossier sur la racine de sdcard (vous pouvez réellement voir tout en naviguant sur votre téléphone)

Enregistrez-les sur la carte SD dans un dossier non-publique

  • Utilise l'espace qui sera libéré lors de la désinstallation wont
  • utilise Secrètement l'espace sur la carte SD

Enregistrez-les dans l'application

  • fait exploser la taille des applications beaucoup trop

Quelle est la bonne façon de sauver localement les images de ma demande de ne pas détourner l'attention de l'utilisateur et ne laissent pas les ordures partout?

Était-ce utile?

La solution

La meilleure solution consiste à utiliser:

context.getCacheDir()

Ce répertoire est privé à l'application et sera supprimé lors de la désinstallation, en outre, le système peut supprimer de ce répertoire pour vous si l'appareil est en cours d'exécution à court d'espace.

Notez bien que les documents disent:

  

vous ne devriez pas compter sur le système   la suppression de ces fichiers pour vous; toi   devrait toujours avoir un raisonnable   maximale, par exemple de 1 Mo, pour le montant   de l'espace que vous consommez avec des fichiers de cache,   et élaguer les fichiers en cas de dépassement   cet espace

Si vous avez besoin de beaucoup d'espace et préférez utiliser la carte SD, vous pouvez appeler

getExternalCacheDir()

au lieu. Ceux-ci seront également supprimeront lors de la désinstallation, mais le système ne surveille pas l'espace disponible dans le stockage externe, donc ne supprime pas automatiquement ces fichiers si peu d'espace. Si vous utilisez cette option, vous devez également vérifier que le stockage externe est disponible avec

Environment.getExternalStorageState()

avant d'essayer d'écrire.

Autres conseils

Vous pouvez si vous mettre dans telle que dir cachée (par exemple, avec un point préfixé) /sdcard/.donotscan/.

Mise à jour: Comme romainguy mentions sur twitter cela fonctionne aussi si vous mettez un fichier nommé dans le répertoire .nomedia.

Je pense que la meilleure façon est d'utiliser la base de données.

  1. Il ne souffle pas l'application et de la mémoire.
  2. La base de données correspondante est supprimée une fois que l'application est désinstallée.
  3. Personne ne peut atteindre à ces fichiers en dehors de votre application.

Mise à jour: Mais; Si vous souhaitez mettre en cache uniquement les données, il est un gestionnaire de cache défini dans WebKit. CacheManager

Je n'ai pas utilisé le paquet avant, mais les méthodes semblent avant d'utiliser directement:

static boolean   cacheDisabled()
static boolean   endCacheTransaction()
static CacheManager.CacheResult  getCacheFile(String url, Map<String, String> headers)
static File  getCacheFileBaseDir()
static void  saveCacheFile(String url, CacheManager.CacheResult cacheRet)
static boolean   startCacheTransaction()

et vous pouvez trouver l'utilisation à code Google Gears

J'espère que cette aide.

Si vous vous ne voulez pas utiliser le CacheManager puis utiliser une base de données ou un fichier local (non-SD) (fichiers locaux sont supprimés sur une désinstallation complète) et vous inscrire pour recevoir le « ACTION_DEVICE_STORAGE_LOW » et diffusion « ACTION_DEVICE_STORAGE_OK » Actions. Ensuite, vous saurez quand votre application prend trop de place selon l'appareil et lorsque vous avez besoin pour commencer la suppression des images. Votre taille de l'application va encore croître, mais vous serez en mesure de gérer la croissance et le retrait.

Juste un petit conseil - si vous les enregistrez sur la carte SD, ils seront analysés par le MediaScanner et apparaîtront dans la Galerie des utilisateurs (photos), que vous ne voulez probablement pas. Donc, vous voulez probablement les stocker sur le téléphone, ou en quelque sorte dire MediaScanner de ne pas les analyser (apparemment impossible après une recherche rapide sur Google.)
Probablement le meilleur pour stocker quelques privilégiés dans le répertoire privé de votre application, qui sera supprimé lorsque votre application est désinstallée.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top