2010-04-20 17 views
14

mantenendo la mia domanda breve, ho creato un'applicazione con 3 attività, dove A - elenco di categorie, B - elenco di elementi, C - singolo elemento. I dati visualizzati in B e C sono analizzati dal codice XML online. Ma, se passo A -> B1 -> C, quindi tornare a A e quindi tornare a B1, vorrei avere i dati memorizzati nella cache da qualche parte in modo da non dover richiedere di nuovo l'XML.Un buon modo per memorizzare dati durante il ciclo di vita delle applicazioni Android?

Sono nuovo per la programmazione Android e Java, ho cercato su Google molto e ancora non riesco a trovare (o semplicemente non ho idea di dove guardare) un modo per fare ciò che voglio.

Memorizza tutti i dati ricevuti nell'attività principale A (HashMaps? ContentProviders?) E quindi passa a B e C (se ricevono la stessa richiesta precedente) sarebbe una buona idea?

risposta

13

Un modo semplice e veloce per memorizzare nella cache informazioni o per tenere traccia dello stato dell'applicazione, è quello di estendere il Application come descritto nella this blog post .

questo post del blog si dimentica di aggiungere che si deve impostare la CustomApplication classe nel manifesto, come:

<application [...] android:name="CustomApplication"> 

Nei miei progetti mi attengo allo stile Singleton getInstance via.

Altre risorse: this answer, Global Variables in Android Apps e this blog post.

+0

Ringrazia la tua prima persona a parlare del manifest, penso che non aggiungerla causi un'eccezione cast. –

-1

È possibile fare uso di memorizzazione dei dati, come spiegato in Android di riferimento qui http://developer.android.com/guide/topics/data/data-storage.html

+0

È un'opzione, ma dovrò preoccuparmi di scaricare dati alla fine di durata della domanda? – sniurkst

+5

non è una buona idea mantenere i dati nella cache anche dopo la fine della vita dell'app? – the100rabh

+0

Le risposte di solo collegamento sono fortemente sconsigliate. –

2

Se si desidera creare una sorta di cache in memoria, considerare l'utilizzo di una mappa con SoftReferences. Le SoftReferences sono una sorta di riferimenti che tendono a mantenere i tuoi dati in giro per un po ', ma non impediscono che vengano raccolti.

La memoria di un telefono cellulare è scarsa, quindi non è possibile mantenere tutto in memoria. In tal caso, potresti voler salvare le cache nella memoria secondaria del dispositivo.

Verificare MapMaker da Google's Collections, che consente di creare comodamente una cache a 2 livelli. Considerate questo modo:

/** Function that attempts to load data from a slower medium */ 
Function<String, String> loadFunction = new Function<String, String>() { 
    @Override 
    public String apply(String key) { 
     // maybe check out from a slower cache, say hard disk 
     // if not available, retrieve from the internet 
     return result; 
    } 
}; 

/** Thread-safe memory cache. If multiple threads are querying 
* data for one SAME key, only one of them will do further work. 
* The other threads will wait. */ 
Map<String, String> memCache = new MapMaker() 
           .concurrentLevel(4) 
           .softValues() 
           .makeComputingMap(loadFunction); 

Chi cache storage secondario del dispositivo, controlla Context.getCacheDir(). Se sei sciatto come me, lascia tutto lì e spera che il sistema pulisca le cose per te quando ha bisogno di più spazio: P

+0

Penso che questo sia il modo giusto, ma un po 'vecchio ... Qualche nuovo risultato sulla cache di storage a 2 livelli dell'app? – Motheus

+0

Come [documentazione ufficiale dell'API Android per SoftReference] (http://developer.android.com/reference/java/lang/ref/SoftReference.html) spiega, non è una buona idea usare SoftReferences per creare una cache. – herman

Problemi correlati