2009-07-22 7 views
6

यहां सौदा है: मेरे पास एक एंड्रॉइड एप्लिकेशन है जिसे हर एक्स सेकंड (वर्तमान में 60 सेकंड) में वेब सेवा कॉल करने की आवश्यकता होती है। इस एप्लिकेशन में कई टैब हैं और इन टैबों को सभी डेटा के साथ बातचीत करने की आवश्यकता है। एक नक्शा दृश्य है, एक सूची दृश्य है और फिर तीसरा अप्रासंगिक है लेकिन अंततः कुछ वैश्विक डेटा भी प्राप्त करने की आवश्यकता होगी। मुद्दा यह है कि मैं चाहता हूं कि मेरी मुख्य गतिविधि पृष्ठभूमि में चलने वाले धागे को प्राप्त करे, परिणाम प्राप्त करें और फिर ताजाहोस्ट में दोनों बच्चों की गतिविधियों को नवीनतम डेटा के साथ अपडेट करने के लिए निर्देशित करें। साथ ही, जब उपयोगकर्ता टैब और ऑनक्रेट/ऑनर्यूम गतिविधियों की आग पर क्लिक करता है, तो मैं मुख्य गतिविधि से नवीनतम डेटा प्राप्त करके एक रेड्रो को भी मजबूर करना चाहता हूं। मैं वास्तव में यहाँ एक नुकसान में हूँ। मैंने टाइमर को निकाल दिए जाने पर अपने विचारों को अपडेट करने के लिए विशिष्ट कार्यों को कॉल करने के लिए सेवा में गतिविधियों के उदाहरण को पारित करने के लिए सेवा और गतिविधियों के कुछ प्रयासों के साथ कुछ गेटो स्थैतिक तरीकों की कोशिश की है, लेकिन मंदी बहुत खराब थी और कोड सिर्फ बदसूरत बदसूरत बदसूरत था । कोई सुझाव?एंड्रॉइड टैबहोस्ट एप्लिकेशन में अंतर-गतिविधि संचार को पूरा करने का सबसे अच्छा तरीका

संपादित करें: इसलिए मैंने इसे टैबहोस्ट गतिविधि में टाइमर-संचालित थ्रेड के रूप में कार्यान्वित किया और फिर मेरे पास प्रत्येक बच्चे की गतिविधि में टाइमर-संचालित धागे हैं जो तब डेटा (एक सिंक्रनाइज़ फैशन में) को पकड़ते हैं और अपना मानचित्र/सूची अपडेट करते हैं। यह बहुत तेजी से थोड़ा हैक-ish महसूस करता है, विशेष रूप से हिस्सा है, लेकिन अभी भी जहां मैं तो जैसे माता-पिता गतिविधि में एक कस्टम समारोह फोन कर रहा हूँ:

((MainActivity)getParent()).getNearbyMatches(); 

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

+0

मेरी इच्छा है कि मुझे यह भी पता चलेगा!+1 – cakeforcerberus

उत्तर

7

तो मुझे पता चला है कि मुझे क्या विश्वास है: The Application Class। वैश्विक एप्लिकेशन स्थिति का ट्रैक रखने के लिए आप इस कक्षा का विस्तार कर सकते हैं।

AndroidManifest.xml फ़ाइल में आप android:name विशेषता में अपनी पूरी तरह से योग्य कस्टम कक्षा का संदर्भ दे सकते हैं और जब ऐप आग लगती है तो इसे तुरंत चालू किया जाएगा।

कोई भी गतिविधि "getApplication()" पर कॉल कर सकती है और यह आपके कस्टम एप्लिकेशन क्लास का उदाहरण वापस कर देगी, जिसे आप स्वाद के लिए तैयार कर सकते हैं।

+0

और यदि मैं इसे लॉन्च करना चाहता हूं, तो मैं रिसीवर-क्लास के भीतर कैसे जांच सकता हूं, पहले से चल रहा है? – bofredo

1

आप अपने जीयूआई अपडेट Handler एस में कार्यान्वित कर सकते हैं और अपने डाउनलोड-थ्रेड के साथ Handler उदाहरण पंजीकृत कर सकते हैं। जब नया डेटा आता है तो डाउनलोड थ्रेड तब हैंडलरों को संदेश भेजता है। अनिवार्य रूप से यह Observer Pattern है। आप Handler s here का उपयोग करने का उदाहरण पा सकते हैं ('दूसरे थ्रेड के साथ उदाहरण प्रगति डायलॉग' का विस्तार करें)।

5

हर बार नया डेटा उपलब्ध होने पर आप सभी बच्चों की गतिविधियों को क्यों अपडेट कर रहे हैं? यह मेरे लिए अक्षम लगता है। वर्तमान में दिखाई देने वाली गतिविधि को अपडेट करें।

ऐसा करने का एक संभावित तरीका custom content provider के माध्यम से है। अपनी सेवा को डेटा गतिविधियों को अपनी गतिविधियों में अपडेट करने दें और इस सामग्री पर बदलावों को सुनने के लिए वर्तमान दृश्य गतिविधि प्राप्त करें। तो मूल रूप से, जब आपका ऑनऑज़्यूम कहा जाता है तो ऑनर्यूज़ को कॉल प्रदाता को पंजीकृत किया जाता है और अनियंत्रित किया जाता है।

अंगूठे के नियम के रूप में कभी भी गतिविधि के स्थिर संदर्भों को संग्रहित नहीं करते !! आप बदसूरत लीक के साथ खत्म हो जाएगा। यदि यह आपके आवेदन के लिए जरूरी है तो कम से कम WeakReferences

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

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