2010-12-01 11 views
8

मैं यह पता लगाने की कोशिश कर रहा हूं कि कई वेब सेवाओं तक पहुंचने वाले अनुप्रयोगों के लिए सबसे अच्छा सामान्य डिज़ाइन क्या है और कई गतिविधियां हैं जहां जानकारी प्रदर्शित होती है।सामान्य एप्लिकेशन डिज़ाइन (IntentService/ContentProvider/AsyncTask)

जिस तरह से मैंने अपना नवीनतम एंड्रॉइड एप्लिकेशन लागू किया है, वह निम्नलिखित है। मेरे पास IntentService है जो वेब सेवाओं से जानकारी प्राप्त करने के लिए गतिविधियों से अनुरोध प्राप्त करता है। मेरा Service अनुरोध की स्थिति (प्रारंभ/त्रुटि/समाप्त) के बारे में ResultReceiver के माध्यम से गतिविधियों को सूचित करता है। वेब सेवा को कॉल करने के बाद, परिणाम (xml/json) प्राप्त करने और इसे पार्स करने के बाद, मैंने उस जानकारी को ContentProvider (एक स्क्लाइट डेटाबेस द्वारा समर्थित) में डाल दिया और परिवर्तनों के बारे में किसी भी गतिविधि को सूचित करने के लिए ContentResolver का उपयोग किया। गतिविधियों को परिवर्तनों के बारे में अधिसूचित किया जाता है (कुछ ContentObserver का उपयोग करते हैं और अन्य SimpleCursorAdapter एस का उपयोग करते हैं और स्वचालित रूप से अधिसूचित होते हैं)।

अब, मेरे दृष्टिकोण के साथ समस्या:

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

मुझे यह महसूस हो रहा है कि मैंने जो दृष्टिकोण लिया है वह वास्तव में इस विशेष एप्लिकेशन के लिए सबसे अच्छा नहीं है। यह आंशिक रूप से Google I/O एप्लिकेशन से प्रेरित है (मैं सबकुछ समझ नहीं पाया, जैसे अद्यतन स्क्लाइट फ़ील्ड इत्यादि)। एक विकल्प सभी गतिविधियों में AsyncTasks का उपयोग करना होगा। लेकिन मैं अन्य गतिविधियों से पहुंचने के लिए जानकारी कहां संग्रहीत कर सकता हूं? Application में सूचियों में? और आईडी प्रबंधन के बारे में कैसे?

मैं वास्तव में आपकी राय/विचार/सुझावों पर रूचि रखता हूं और मैं अपने अगले एप्लिकेशन को बेहतर और अधिक कुशलता से कैसे काम कर सकता हूं।

उत्तर

2

क्या आपने इस बात की जांच की? http://www.youtube.com/watch?v=xHXn3Kg2IQE

मुझे इसे अच्छी प्रेरणा का स्रोत मिला। मूल रूप से, वे एक सिंगलटन वर्ग के रूप में एक सेवा सहायक (आपके मामले में, आपकी मंशा सेवा के लिए एक सहायक सहायक) बनाने का सुझाव देते हैं। आप चल रहे अनुरोधों को ट्रैक कर सकते हैं

इस तरह आप अपने द्वारा किए जा रहे हर प्रकार के चल रहे पृष्ठभूमि कार्यों को ट्रैक कर सकते हैं, और उसी प्रकार के किसी अन्य अनुरोध को अवरुद्ध कर सकते हैं। उदाहरण के लिए, यदि आप गतिविधि को छोड़ देते हैं और गतिविधि बी दर्ज करते हैं, और वे उसी वेब सेवा क्वेरी के लिए पूछते हैं, तो आप यह जांच सकते हैं कि गतिविधि ए के कारण यह अभी भी प्रगति पर है।

जो मैंने आईस किए गए ऐप पर देखा, उससे समस्या का सामना करना पड़ता है कि अगर गतिविधि बंद हो गई, तो fetch परिणाम खो जाता है।

Log.w(TAG, "Dropping result on floor for code " + resultCode + ": " + resultData.toString());

मैं भी asynctask उपयोग करने का सुझाव नहीं है, क्योंकि परिणाम के रूप में अच्छी तरह से खो जाएगा:

वहाँ एक स्पष्ट लॉग कहते है।

हालांकि, बातचीत और स्लाइड पर एक नज़र डालें।

+0

ठीक है, मैंने पहले प्रस्तुति देखी है और विकास के दौरान मैं इससे प्रभावित था। लेकिन मैं पूरी तरह से नहीं गया क्योंकि मुझे पर्याप्त आत्मविश्वास महसूस नहीं हुआ। अगर मैं दृष्टिकोण के बारे में अधिक कार्यान्वयन विवरण देख सकता हूं तो इससे मदद मिलेगी। क्या आप अन्य ओपन सोर्स एंड्रॉइड एप्लिकेशन की सिफारिश कर सकते हैं? धन्यवाद। –

+0

मुझे इसे स्क्रैच से भी पुन: कार्यान्वित करना पड़ा, क्योंकि मुझे कोई ओपन सोर्स उदाहरण भी नहीं मिला। काफी बुरा है कि वे उदाहरण के बारे में बताते हैं कि वे किस बारे में बात करते हैं ... – fedepaol

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