Domanda

mantenendo il mio breve domanda, ho creato un'applicazione con 3 attività, dove A - elenco delle categorie, B - elenco delle voci, C - singolo elemento. I dati visualizzati in B e C viene analizzato da XML in linea. Ma, se vado per A -> B1 -.> C, poi di nuovo ad A e poi di nuovo a B1, vorrei avere i suoi dati in qualche luogo nella cache in modo da non dover richiedere nuovamente l'XML

Sono nuovo di Android e di programmazione Java, Googled molto e ancora non riesce a trovare (o semplicemente non avere idea di dove cercare) un modo per fare quello che voglio.

Sarebbe la memorizzazione di tutti i dati ricevuti in attività principale A (HashMaps? ContentProviders?) E poi passando a B e C (se ottengono stessa richiesta che era prima) essere una buona idea?

È stato utile?

Soluzione

Un semplice e veloce per le informazioni cache o per tenere traccia dello stato di applicazione, è quello di estendere il Application come descritto in questo post del blog .

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

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

Nei miei progetti mi attengo allo stile Singleton getInstance via.

Ulteriori risorse: questa risposta , noreferrer Variabili globali in applicazioni Android e questo post del blog .

Altri suggerimenti

Se si vuole costruire una sorta di cache di memoria, considerare l'utilizzo di una mappa con SoftReferences. SoftReferences sono una sorta di riferimenti che tendono a mantenere i vostri dati in giro per un po ', ma non le impedisce di essere garbage collection.

Memoria su un telefono cellulare è scarso, in modo da tenere tutto in memoria non può essere pratico. In questo caso si consiglia di salvare le cache su storage secondario del dispositivo.

Scopri MapMaker da Google collezioni , che permette di costruire facilmente una cache di 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);

A proposito di cache su storage secondario del dispositivo, controlla Contesto. getCacheDir () . Se siete sciatta come me, basta lasciare tutto lì e la speranza che il sistema pulirà cose per voi quando ha bisogno di più spazio: P

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

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