2010-04-20 7 views
14

मेरा प्रश्न छोटा रखते हुए, मैंने 3 गतिविधियों के साथ एक आवेदन बनाया है, जहां ए - श्रेणियों की सूची, बी - वस्तुओं की सूची, सी - एकल आइटम। बी और सी में प्रदर्शित डेटा को ऑनलाइन एक्सएमएल से पार्स किया गया है। लेकिन, अगर मैं ए -> बी 1 -> सी के माध्यम से जाता हूं, फिर वापस ए और फिर वापस बी 1 तक जाता हूं, तो मैं कहीं भी अपना डेटा कैश करना चाहता हूं इसलिए मुझे एक्सएमएल से फिर से अनुरोध नहीं करना पड़ेगा।एंड्रॉइड एप्लिकेशन लाइफसाइकिल के दौरान डेटा कैश करने का अच्छा तरीका?

मैं एंड्रॉइड और जावा प्रोग्रामिंग के लिए नया हूं, मैंने बहुत कुछ किया है और अभी भी मुझे नहीं मिल रहा है (या बस यह देखने का कोई विचार नहीं है कि मैं क्या चाहता हूं)।

मुख्य गतिविधि ए (हैशमैप्स? सामग्री प्रदाता?) में सभी प्राप्त डेटा संग्रहीत करना होगा और फिर बी और सी (यदि वे पहले से ही वही अनुरोध प्राप्त करते हैं) में गुजर रहे हैं तो एक अच्छा विचार हो सकता है?

उत्तर

13

जानकारी कैश करने के लिए या आवेदन राज्य का ट्रैक रखने के एक सरल और तेज़ तरीका समझाया आप डेटा भंडारण का उपयोग कर सकते, this blog post में वर्णित के रूप आवेदन विस्तार करने के लिए है ।

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

अपनी परियोजनाओं में मैं getInstance के माध्यम से सिंगलटन शैली के लिए छड़ी:

इस ब्लॉग पोस्ट को जोड़ने के लिए मेनिफेस्ट में अपने CustomApplication वर्ग सेट करने के लिए है कि आप की तरह भूल जाता है।

अधिक संसाधन: this answer, Global Variables in Android Apps और this blog post

+0

मैनिफेस्ट के बारे में बात करने वाले पहले व्यक्ति को धन्यवाद, मुझे लगता है कि इसे जोड़ना नहीं है, यह एक कास्ट अपवाद का कारण बनता है। –

-1

के रूप में एंड्रॉयड संदर्भ में यहां http://developer.android.com/guide/topics/data/data-storage.html

+0

यह एक विकल्प है, लेकिन मुझे अंत में डेटा फ्लश करने की चिंता करनी होगी आवेदन जीवनकाल? – sniurkst

+5

ऐप जीवनकाल के अंत के बाद भी डेटा कैश रखने का अच्छा विचार नहीं है? – the100rabh

+0

लिंक-केवल उत्तर दृढ़ता से निराश हैं। –

2

यदि आप स्मृति पर किसी प्रकार का कैश बनाना चाहते हैं, तो सॉफ्ट रेफरेंस के साथ मानचित्र का उपयोग करने पर विचार करें। सॉफ़्ट रेफरेंस ऐसे संदर्भ हैं जो आपके डेटा को थोड़ी देर के लिए रखते हैं, लेकिन इसे एकत्रित कचरा होने से नहीं रोकते हैं।

सेल फोन पर मेमोरी दुर्लभ है, इसलिए स्मृति में सबकुछ रखना व्यावहारिक नहीं हो सकता है। उस स्थिति में आप अपने कैश को डिवाइस के द्वितीयक भंडारण पर सहेजना चाह सकते हैं।

Google's Collections से MapMaker देखें, जो आपको आसानी से 2-स्तर के कैश बनाने की अनुमति देता है। , उपकरण के माध्यमिक भंडारण पर

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

कैश के बारे में Context.getCacheDir() की जाँच: ऐसा करने पर विचार करें। यदि आप मेरे जैसे मैला हैं, तो बस वहां सबकुछ छोड़ दें और उम्मीद करें कि जब सिस्टम को अधिक जगह चाहिए तो सिस्टम आपके लिए चीजों को साफ करेगा: पी

+0

मुझे लगता है कि यह सही तरीका है लेकिन थोड़े पुराने ... ऐप 2-स्तर + स्टोरेज कैश के बारे में कोई नया निष्कर्ष? – Motheus

+0

[सॉफ़्ट रेफरेंस के लिए आधिकारिक एंड्रॉइड एपीआई दस्तावेज] के रूप में (http://developer.android.com/reference/java/lang/ref/SoftReference.html) बताते हैं, कैश बनाने के लिए सॉफ़्ट रेफरेंस का उपयोग करना एक अच्छा विचार नहीं है। – herman

संबंधित मुद्दे