Domanda

La mia applicazione utilizza un bel po 'di immagini che vengono scaricati da internet e nella cache localmente sul telefono Android. Mi chiedo, qual è il modo corretto per salvare quelle immagini. Ci sono diversi modi che vedo, che non sono pienamente soddisfacenti.

Salva loro su scheda SD in una cartella pubblica

  • Utilizza lo spazio che non sarà liberato su Disinstalla
  • L'utente può visualizzare le foto nella Galleria
  • ha bisogno di una cartella nella directory principale sdcard (si può effettivamente vedere che durante la navigazione il telefono)

Salva loro su scheda SD in una cartella non pubblica

  • Utilizza lo spazio che non sarà liberato su Disinstalla
  • utilizza Segretamente spazio sulla scheda SD

Salvarle all'interno dell'applicazione

  • fa esplodere le dimensioni delle applicazioni troppo

Qual è il modo corretto di salvare in locale le immagini della mia applicazione per non distrarre l'utente e non lasciare spazzatura ovunque?

È stato utile?

Soluzione

La soluzione migliore è quella di utilizzare:

context.getCacheDir()

Questa directory è privato per l'applicazione e verrà eliminato il disinstallazione, inoltre, il sistema può eliminare da questa directory per voi, se il dispositivo è in esecuzione a corto di spazio.

Nota però che i documenti dicono:

  

non si dovrebbe fare affidamento sul sistema   eliminazione di questi file per voi; voi   dovrebbe sempre avere una ragionevole   massima, ad esempio 1 MB, per l'importo   di spazio che si consumano con i file di cache,   e potare i file in caso di superamento   che lo spazio

Se avete bisogno di un sacco di spazio e preferisce utilizzare la scheda SD è possibile chiamare

getExternalCacheDir()

, invece. Questi saranno anche ottenere rimosso su disinstallazione, ma il sistema non controlla lo spazio disponibile nella memoria esterna, in modo da non eliminare automaticamente questi file se a corto di spazio. Se si utilizza questa opzione si dovrebbe anche verificare che l'archiviazione esterna è disponibile con

Environment.getExternalStorageState()

prima di tentare di scrivere su di esso.

Altri suggerimenti

È possibile nascondere le immagini dalla MediaScanner se metterlo in una nascosta dir (cioè, con un punto prefissato) come /sdcard/.donotscan/.

Aggiornamento: Come romainguy menzioni su Twitter questo funziona anche se si mette un file chiamato .nomedia nella dir.

Penso che il modo migliore è quello di utilizzare il database.

  1. Non ha saltare in aria l'applicazione e la memoria.
  2. Il database correlato viene eliminato una volta che l'applicazione viene disinstallata.
  3. Nessuno può arrivare a questo file oltre l'applicazione.

Aggiornamento: Ma; Se si desidera memorizzare nella cache solo i dati, v'è un gestore di cache definita in WebKit. CacheManager

non ho usato il pacchetto prima ma i metodi sembra semplice da usare:

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()

e si può trovare l'uso di in Google Gears codice

Spero che questo aiuta.

Se non si desidera utilizzare il CacheManager quindi utilizzare un un file locale (non-SD) del database o (file locali vengono eliminati su una disinstallazione completa) e registrarsi per ricevere il 'ACTION_DEVICE_STORAGE_LOW' e broadcast 'ACTION_DEVICE_STORAGE_OK' Azioni. Allora saprete quando l'applicazione sta prendendo troppo spazio a seconda del dispositivo e quando è necessario iniziare a eliminare le immagini. La dimensione dell'applicazione sarà ancora crescere, ma si sarà in grado di gestire la crescita e contrazione.

Un suggerimento - se li si salva sulla scheda SD, saranno sottoposti a scansione dal MediaScanner e appariranno nei di utenti Galleria (foto), che probabilmente non si vuole. Quindi probabilmente si desidera memorizzare loro al telefono, o in qualche modo dire MediaScanner di non eseguire la scansione di loro (apparentemente impossibile dopo una rapida ricerca su Google.)
Probabilmente la cosa migliore per memorizzare pochi eletti nella directory privata dell'applicazione, che verrà rimosso quando l'applicazione viene disinstallata.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top