2010-11-17 11 views
6

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

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

उत्तर

2

उन्हें Application में रखें। यह किसी भी एंड्रॉइड एप्लिकेशन का आधार वर्ग है और यह पूरे जीवनकाल के दौरान जीवित है, जबकि दिखाए जाने पर या अभिविन्यास बदल नहीं होने पर गतिविधियां मारे जाती हैं।

आपने अपने AndroidManifest.xml में android:name घोषित करने के लिए है:

<application android:name=".YourApplication"/> 

संपादित:

यह भी प्रासंगिक है: How do I pass data between Activities/Services within a single application?

+0

क्या मुख्य वर्ग भी अव्यवस्थित नहीं होगा? विशेष रूप से, अगर मैं इसमें अधिक डेटा (सरणी) रखूंगा और उस डेटा को प्रबंधित करने (जोड़ने, बदलने, खोजने) के लिए समर्पित विधियों को रखूंगा। – sniurkst

+0

यह आपका डिज़ाइन निर्णय है। मैं बस इतना कह रहा हूं कि एप्लिकेशन सभी गतिविधियों के लिए सुलभ है और एप्लिकेशन लाइफसाइक्ल से जुड़ा हुआ साझा डेटा स्टोर करने का सही स्थान है, न कि गतिविधि जीवन चक्र। –

+0

आप सीधे डेटा में डेटा डाल सकते हैं या आप इसे एक विशेष कक्षा में डाल सकते हैं और एप्लिकेशन के अंदर इसका संदर्भ ले सकते हैं। –

1

कि निर्भर करता है कि आपके प्रोग्रामिंग शैली है lol।

जैसा कि आपने कहा था कि एक सिंगलटन बनाएं जो आपके एक्सएमएल को पढ़े और सबकुछ स्टोर करेगा।

आप अपनी कक्षा में एक स्थिर हैश बना सकते हैं। इस तरह जब आप एक नई वस्तु बनाते हैं तो आपको उस वर्ग से स्थिर जानकारी तक पहुंच होगी।

आप कक्षा से कक्षा तक पैरामीटर के रूप में जानकारी पास कर सकते हैं।

यदि आप हमें यह बताने के लिए चाहते हैं कि कौन सा सबसे अच्छा होगा तो आपके कार्यक्रम की वास्तुकला को जानने के बिना यह मुश्किल होगा।

उदाहरण के लिए आप एक व्यू कंट्रोलर हो सकते हैं जो किसी भी बदलाव को संभालता है और फिर उस स्तर पर डेटा को स्टोर करना आसान होता है जब आप दृश्य स्विच करते हैं।

आपके पास स्थिर दृश्य हो सकते हैं जिसमें आप सभी मूल्यों को सीधे खोल सकते हैं जैसे आप उन्हें खोलते हैं।

आप losely किसी भी नियंत्रक स्विचिंग को संभालने के लिए बिना और उस मामले में आप एक तरह से जानकारी आप एक सिंगलटन या एक स्थिर विधि से की जरूरत है इकट्ठा करने के लिए होने पसंद कर सकते हैं होता देखा गया है कि एक दूसरे को फोन से जुड़ा हुआ हो सकता था ...

+0

खैर, आदर्श रूप में, मैं एक कक्षा चाहता हूं जो: सभी गतिविधियों के लिए सुलभ होगा, वस्तुओं की एक सरणी संग्रहित करेगा और उस सरणी को प्रबंधित करने में सक्षम होगा (अधिक ऑब्जेक्ट्स जोड़ें, सरणी में अपनी स्थिति या किसी प्रकार की वस्तु से ऑब्जेक्ट प्राप्त करें संपत्ति का) यदि यह मेरा प्रश्न अधिक स्पष्ट करता है। – sniurkst

0

जब तक आप सुनिश्चित करते हैं कि आपके पास साझा डेटा पर कोई धागा नहीं है, तो आप स्थिर सदस्यों के साथ एक स्थिर वर्ग बना सकते हैं। प्रत्येक गतिविधि इसे एक्सेस करने में सक्षम हो जाएगी। यदि आपके डेटा के लिए async डाउनलोड का उपयोग करते हैं तो अपने हैंडलर के ऑनपोस्टएक्सक्यूट में आप ग्लोबवर्स को स्पर्श कर सकते हैं क्योंकि यह यूआई थ्रेड पर चलता है।

public class GlobalVars { 
    public static String userId = "?"; 
    //public static String serverUrl = "10.0.2.2"; //localhost when developing 
    public static String serverUrl = "192.168.1.4"; //on device to laptop 
    //public static String serverUrl = "102.192.293.10"; //production 
    public static Book currentBook = null; 
    public static Chapter currentChapter = null; 
    public static int lastclickedChapter = -1; 
    public static Voice currentVoice = null; 
    public static String catalogJson = ""; 
    public static ArrayList<Book> catalogItems = null; 
} 

MainActivity का onCreate मैं xml का मेरे डाउनलोड सूची वस्तुओं के लिए परिवर्तित करने के लिए सूची निर्धारित कर सकते हैं

GlobeVars.catalogItems = downloaded xml to object list 
मेरी SubActivity में

जो onclicklistener में मैं सेट कर सकते हैं अध्याय की एक सूची है:

GlobeVars.currentChapter = items[clickeditem]; 

जब आप मुख्य गतिविधि पर वापस आते हैं तो मान अभी भी सेट हो जाएंगे।

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

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