2010-04-20 13 views
14

utrzymując moje pytanie krótkie, stworzyłem aplikację z 3 czynnościami, gdzie A - lista kategorii, B - lista przedmiotów, C - pojedyncza pozycja. Dane wyświetlane w B i C są analizowane z internetowego XML. Ale jeśli przejdę przez A -> B1 -> C, następnie z powrotem do A, a następnie z powrotem do B1, chciałbym mieć gdzieś ich dane buforowane, więc nie będę musiał ponownie żądać XML.Dobry sposób na buforowanie danych podczas cyklu życia aplikacji na Androida?

Jestem nowy w programowaniu w systemie Android i Java. Często googlowałem i nadal nie mogę znaleźć (lub po prostu nie mam pojęcia, gdzie szukać) sposobu, aby zrobić to, co chcę.

Czy przechowywanie wszystkich otrzymanych danych w głównej aktywności A (HashMaps? ContentProviders?), A następnie przekazywanie do B i C (jeśli otrzymają takie samo żądanie, które było wcześniej), czy byłby to dobry pomysł?

Odpowiedz

13

prosty i szybki sposób buforowania informacji lub śledzenia stanu aplikacji jest rozszerzenie Zastosowanie jak opisano w this blog post .

Ten blogu zapomina dodać, że trzeba ustawić CustomApplication klasę w manifeście, jak:

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

w moich projektów I trzymać się stylu singleton poprzez getInstance.

Inne zasoby: this answer, Global Variables in Android Apps i this blog post.

+0

Dziękuję pierwszej osobie, która mówi o manifeście, myślę, że nie dodanie go powoduje wyjątek odlewu. –

-1

można wykorzystać do przechowywania danych, jak wyjaśniono w Android Reference tutaj http://developer.android.com/guide/topics/data/data-storage.html

+0

Jest to opcja, ale muszę się martwić spłukiwaniem danych pod koniec okres użytkowania aplikacji? – sniurkst

+5

Czy nie warto przechowywać danych w pamięci podręcznej nawet po zakończeniu okresu użytkowania aplikacji? – the100rabh

+0

Odpowiedzi dotyczące wyłącznie linków są zdecydowanie odradzane. –

2

Jeśli chcesz zbudować jakąś pamięć podręczną w pamięci, rozważ użycie mapy z SoftReferencjami. SoftReferences to rodzaj odniesień, które mają tendencję do przechowywania danych przez jakiś czas, ale nie uniemożliwiają gromadzenia śmieci.

Pamięć na telefon komórkowy jest skąpa, więc przechowywanie wszystkiego w pamięci może nie być praktyczne. W takim przypadku możesz zapisać swoje pamięci podręczne w pamięci dodatkowej urządzenia.

Zapoznaj się z programem MapMaker pod numerem Google's Collections, który umożliwia wygodne budowanie 2-poziomowej pamięci podręcznej. Rozważmy ten sposób:

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

O pamięci podręcznej na wtórnym przechowywania urządzenia, sprawdź Context.getCacheDir(). Jeśli jesteś tak niechlujny jak ja, po prostu zostaw to wszystko i miej nadzieję, że system wyczyści ci wszystko, gdy będzie potrzebować więcej miejsca: P

+0

Myślę, że to jest właściwa droga, ale trochę stara ... Jakieś nowe odkrycia dotyczące aplikacji 2-poziomowej + pamięci podręcznej magazynu? – Motheus

+0

Jak wyjaśnia [oficjalna dokumentacja Android API dla SoftReference] (http://developer.android.com/reference/java/lang/ref/SoftReference.html), nie jest dobrym pomysłem użycie SoftReferences do zbudowania pamięci podręcznej. – herman

Powiązane problemy