2011-12-16 14 views
9

Ho letto questo Android save app settings/data in Internal/External Storage ma non penso di avere davvero una risposta.Quando si memorizzano nella cache le immagini e i dati, si deve utilizzare la memoria interna o esterna?

Sto sviluppando un'applicazione in cui dovrei memorizzare alcuni dati "cache", come una dozzina di immagini e alcune stringhe (json).

Inizialmente stavo memorizzando tutto ciò sulla sdcard, (memoria esterna) ma in seguito ho pensato che questo potrebbe essere deprecato dalla deprecazione di SDCard nei dispositivi più recenti.

Dopo aver letto un po ', ho capito che memorizzazione esterna non è solo sdcard, ma "un supporto di memorizzazione rimovibile (ad esempio una scheda SD) o (non rimovibile) memorizzazione interna" quindi non dovrebbe essere deprecato ma. ..è lo spazio condiviso, e non c'è la proprietà sui file memorizzati lì, quindi il primo problema era che non ero in grado di cancellarli quando l'app è stata cancellata.

Così ho cambiato nella memoria interna, per evitare che i file/immagini "pubblico" e anche dopo averli rimossi dopo circa eliminazione.

È l'approccio consigliato?

Su dispositivi più vecchi con poca memoria interna ma con molto spazio nella SDcard è un buon approccio?

La mia applicazione supporta da 1,6 a 4,0 (finora) quindi ho molti dispositivi legacy ... e devo avere l'app funzionante (bene) su tutti.

In attesa di alcune risposte interessanti!

+0

Sto salvando le mie stringhe json come sharedpreference mentre le stringhe json sono, chi sapeva, sono stringhe :). – poitroae

+0

Ancora, la domanda rimane con le immagini :-) – neteinstein

+1

Si dovrebbe fare uso della memoria interna privata in modo che l'utente non possa modificare questi dati manualmente e verrà rimosso quando l'app viene disinstallata (si spera mai :)). È necessario verificare se la capacità interna del dispositivo è sufficientemente ampia da contenere i dati. Se sì, salvalo internamente, se no, l'unico modo è salvarlo sulla sdcard. – poitroae

risposta

4

Dipende dal tipo di dati che si desidera memorizzare.

Si dice che si tratta di dati memorizzati nella cache, quindi è scontato che non dovrebbe importare se per qualche motivo tutto scompare. Questo mi porta a credere che dovresti usare lo getCacheDir(). In questo caso il sistema rimuoverà i file se la cache diventa troppo grande, quindi i dispositivi con poca memoria interna non dovrebbero presentare problemi (sebbene si consiglia comunque di gestirli autonomamente), è relativamente sicuro e sarà gestito dall'app quindi se c'è una disinstallazione sarà rimossa.

getExternalCacheDir() è stato introdotto nel 2.2, quindi non è un qualsiasi utilità per voi a meno che non si desidera rilevare la versione e passare tra i 2 directory di caching getExternalCacheDir() non fornisce la sicurezza in modo dati potrebbero essere accessibili da ogni caso con accesso alla SD carta. L'unica ragione per cui potrei pensare che tu voglia fare questo è a causa della dimensione della cache che desideri ma dalla tua descrizione i dati non sembrano eccessivi.

aggiornato dal commento:

anche se questo è un caso specifico in cui è nascondiglio ... ma non voglio è da cancellare ogni volta che il sistema vuole. È il tipo di cache che mi serve l'app per decidere quando eliminare.Qual è la preoccupazione principale di archiviare nella memoria interna "normale" senza essere nella cache dir?

Se si arriva al punto in cui il sistema sta pulendo dati memorizzati nella cache interna a causa di stoccaggio è così basso, allora si dovrebbe probabilmente lasciare per ripulire questo tipo di dati delle applicazioni. Usando la memoria interna dei dati standard si evita questa protezione sicura che probabilmente creerebbe problemi più spiacevoli rispetto all'eliminazione dei dati delle app.

Se i dati sono di grande importanza, suggerirei di provare a identificare i dati specifici più importanti e gestirli separatamente. Se questi dati identificati devono essere sicuri, l'archiviazione interna utilizzando i file o un db (a seconda del tipo di dati) sembra la tua unica vera opzione, ma dovresti essere cauto sul fatto che questi dati si accumulino.

aggiornato dal commento

Cosa pensi di usare SharedPreferences per salvare i dati di stringa? Esiste un limite per la dimensione salvata della stringa SharedPreference? È una (buona) possibilità?

ho usato preferenze condivise per memorizzare relativamente grandi stringhe JSON in passato senza alcun problema, lo trovo più semplice rispetto all'utilizzo di banche dati per i tipi primitivi di dati (e stringhe) dove ci sono valori limitati da salvare. Tuttavia, quando hai immagini o molti valori, la gestione diventa più complessa. Inoltre avrai lo stesso problema che avresti con la memoria interna standard in termini di spazio di archiviazione.

+0

Bella risposta .. anche se questo è un caso specifico in cui è cache ... ma non voglio che venga eliminato ogni volta che il sistema lo richiede. È il tipo di cache che ho bisogno dell'app per decidere quando eliminare. Qual è la preoccupazione principale dell'archiviazione nella memoria interna "normale" senza essere nella directory della cache? External Cache Dir non è un'opzione perché sto supportando 1.6> – neteinstein

+0

Cosa pensi dell'utilizzo di SharedPreferences per salvare i dati di stringa? Esiste un limite per le dimensioni salvate della stringa SharedPreference? È una (buona) possibilità? – neteinstein

+1

@NeTeInStEiN Risposta aggiornata per i commenti – zode64

0

Vorrei usare la memoria interna per la cache. Ciò toglierà la possibilità a un utente di accedere ai file utilizzati nella tua app. Vorrei andare per interno

+0

Non pensi che potrebbe essere un problema nei dispositivi più vecchi? – neteinstein

+0

Possibilmente..È sempre possibile testare la versione dei dispositivi, e quindi prendere una decisione in base a ciò. =) –

0

vorrei tenere le immagini sulla memoria esterna, probabilmente in una cartella "nascosta" (aggiunta di un punto alla beggining del nome della cartella: .folder) ed anche un "avoider" il Media Scanner (.nomedia), perché, come hai indicato, vuoi che l'applicazione funzioni sui vecchi dispositivi, e proprio quei dispositivi non hanno molta memoria interna.

È anche possibile aggiungere un'opzione all'applicazione per rimuovere quella cartella, quindi nel caso in cui l'utente desideri disinstallarla, può farlo prima.

+0

Non posso avere questa opzione. Requisiti :-\ . Riguardo ai punti, sì, l'ho avuto io, come il file per evitare che lo scanner multimediale scannerizzi le immagini. – neteinstein

+0

Sì ... anche quello .nomedia (ho dimenticato). Lo storage interno è un grosso problema per i telefoni legacy, e penso che sia il motivo principale per disinstallare le app che lo utilizzano molto ..Spero che tu possa trovare una buona soluzione – SERPRO

Problemi correlati