2010-04-20 3 views
14

meine Frage kurz zu halten, habe ich eine Anwendung mit 3 Aktivitäten erstellt, wobei A - Liste der Kategorien, B - Liste der Elemente, C - einzelnes Element. Daten, die in B und C angezeigt werden, werden aus Online-XML analysiert. Aber wenn ich durch A -> B1 -> C gehe, dann zurück zu A und dann zurück zu B1, möchte ich, dass seine Daten irgendwo zwischengespeichert werden, damit ich das XML nicht erneut anfordern müsste.Gute Möglichkeit zum Zwischenspeichern von Daten während des Lebenszyklus von Android-Anwendungen?

Ich bin neu in Android und Java-Programmierung, ich habe viel gegooglet und kann immer noch nicht finden (oder einfach keine Ahnung, wo ich suchen soll) eine Möglichkeit, das zu tun, was ich will.

Würden alle empfangenen Daten in der Hauptaktivität A (HashMaps? ContentProviders?) Gespeichert und dann an B und C übergeben (wenn sie die gleiche Anfrage erhalten, die vorher schon einmal gemacht wurde)?

Antwort

13

eine einfache und schnelle Möglichkeit, um Informationen in dem Cache oder den Überblick über den Anwendungszustand zu halten, ist die Anwendung zu erweitern wie in this blog post beschrieben .

Dieses Blog-Eintrag vergisst hinzuzufügen, dass Sie Ihre Custom Klasse im Manifest festgelegt haben, wie:

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

In meinen Projekten, die ich auf den Singleton Stil über getInstance bleiben.

Weitere Ressourcen: this answer, Global Variables in Android Apps und this blog post.

+0

Vielen Dank, dass Ihre erste Person über das Manifest gesprochen hat. –

-1

Sie können Nutzung der Datenspeicherung machen wie in Android Referenz hier erklärten http://developer.android.com/guide/topics/data/data-storage.html

+0

Es ist eine Option, aber ich werde mich sorgen machen müssen, um die Daten zu leeren Anwendungslebensdauer? – sniurkst

+5

Ist es nicht eine gute Idee, die Daten auch nach dem Ende der Lebensdauer der App im Cache zu behalten? – the100rabh

+0

Nur Link-Antworten werden dringend empfohlen. –

2

Wenn Sie eine Art Cache im Speicher erstellen möchten, sollten Sie eine Karte mit SoftReferences verwenden. SoftReferences sind eine Art von Verweisen, die dazu neigen, Ihre Daten für eine Weile herumzuhalten, verhindern jedoch nicht, dass sie als Garbage Collections erfasst werden.

Speicher auf einem Handy ist knapp, so dass alles im Speicher zu halten möglicherweise nicht praktikabel ist. In diesem Fall sollten Sie Ihre Caches auf dem sekundären Speicher des Geräts speichern.

Schauen Sie sich MapMaker von Google's Collections an, mit dem Sie bequem einen 2-Level-Cache erstellen können. Betrachten Sie dies tun:

/** 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); 

Über Cache auf dem Gerät des Sekundärspeicher Besuche Context.getCacheDir(). Wenn du schlampig bist wie ich, dann lass alles dort und hoffe, dass das System die Dinge für dich säubert, wenn es mehr Platz benötigt: P

+0

Ich denke, das ist der richtige Weg, aber irgendwie alt ... Neue Erkenntnisse über App 2-Level + Storage-Cache? – Motheus

+0

Wie die [offizielle Android-API-Dokumentation für SoftReference] (http://developer.android.com/reference/java/lang/ref/SoftReference.html) erklärt, ist es keine gute Idee, SoftReferences zu verwenden, um einen Cache zu erstellen. – herman