2015-12-02 8 views
7

मैं निम्नलिखित स्थिति है:कैसे लागू करने के लिए संचार गतिविधि-सेवा

मैं एक सेवा है कि इंटरनेट पर नए डेटा के लिए समय-समय पर जाँच करता है,

  • वे जब नए डेटा उपलब्ध हैं डाउनलोड किया है और बचाया जाता है स्क्लाइट पर
  • जब डीबी को सहेजना पूरा हो जाता है तो सेवा एक इरादा प्रसारित करती है ताकि गतिविधि डीबी से नए डेटा को खींचने के बारे में जान सके।

उपयोगकर्ता एक तत्काल अपडेट का अनुरोध करने चाहते हो सकता है ...

... उस मामले में मैं एक मैसेंजर का उपयोग सेवा अनुरोध करने के लिए नए डेटा

यहाँ देखने के लिए समस्या है :

उपयोगकर्ता को सूचित किया जाता है कि एक अनुरोध चल रही है, लेकिन यह कुछ समय लग सकता, असफल हो सकता है, कभी वापस नहीं कर सकता है ...

वर्तमान ly मुझे अनुरोध के परिणाम की सूचना देने के लिए सेवा से गतिविधि तक वापस एक संदेश (मैसेंजर का उपयोग करके) प्राप्त होता है, या यदि मुझे कोई संदेश नहीं मिलता है, तो x सेकंड में मैं उपयोगकर्ता को सूचित करता हूं कि अनुरोध असफल रहा।

  1. क्या आप एक अलग दृष्टिकोण सुझा सकते हैं?
  2. मुझे संदेश के लिए का इंतजार नहीं करना है और यदि x सेकंड के बाद कोई भी प्राप्त नहीं हुआ है तो उपयोगकर्ता को सूचित करें, क्या कोई बेहतर तरीका है?
+0

"लेकिन इसमें कुछ समय लग सकता है, असफल हो सकता है, कभी वापस नहीं आ सकता ..." ये हैं सभी सामान्य sceneries सही है? यदि किसी कारण से कम नेटवर्क या सर्वर देरी के साथ प्रतिक्रिया देता है, तो ग्राहक को तदनुसार उपयोगकर्ता को संभालना और सूचित करना था। अगर मैं आपके प्रश्न को गलत समझ रहा हूं तो मुझे सही करें। – cgr

+0

क्या आप सिंक एडाप्टर का उपयोग कर रहे हैं ?? –

+0

यदि आप अपना कोड दिखाते हैं, तो मैं आपके लिए उत्तर तैयार करने पर विचार करता हूं, जैसा कि यह खड़ा है, यह प्रश्न बहुत व्यापक है। –

उत्तर

3

आपको मूल बातें मिल गई हैं, इसलिए सिफारिश करने के लिए और कुछ नहीं है।

  • आप ContentObserver का उपयोग करें और अद्यतन यूआई एक बार वहाँ डेटाबेस (सेवा से एक संदेश के लिए प्रतीक्षा करने की कोई जरूरत नहीं) में नए डेटा है कर सकते हैं: मैं बस आपको कुछ विकल्प दिखाई देंगे।
  • यदि आपको सेवा < -> UI घटकों के बीच बहुत अधिक संचार मिला है, तो आप Otto, EventBus पर एक नज़र डालें या Observables/RxJava पर अपने कोड को पुन: व्यवस्थित करें।
  • आप टाइमआउट तर्क को सेवा में ले जा सकते हैं (यह इस तरह से आसान होगा क्योंकि सभी त्रुटि प्रबंधन एक ही स्थान पर होंगे) और केवल त्रुटि संदेश को UI पर वापस कर दें। अधिकांश नेटवर्क फ्रेमवर्क आपको कनेक्शन टाइमआउट पैरामीटर सेट करने की अनुमति देते हैं और इस बार पहुंचने के बाद अनुरोध विफल हो जाएंगे। यदि आपने अभी तक नेटवर्क ढांचे को नहीं देखा है - Retrofit + OkHttp एक शानदार प्रारंभिक बिंदु है।
+0

सेवा में टाइमआउट डालने का विचार अच्छा है! यह बहुत परेशानी बचाता है !!! –

2

आप सोच सकते हैं आशावादी प्रतिपादन/आशावादी अपडेट - जिसमें आप क्लाइंट पर यूआई अद्यतन के रूप में अगर यह सर्वर पर सफल होने गया है एक पैटर्न। एक बार जब आप सर्वर से प्रतिक्रिया प्राप्त कर लेते हैं तो आप यूआई को तदनुसार अपडेट करते हैं।आप की तरह google hangouts.

नए डिजाइन के साथ क्षुधा उल्लेख कर सकते हैं के लिए और अधिक जानकारी के लिए इस विचार-विमर्श के संदर्भ लें:

मैं इस दृष्टिकोण का उपयोग कर लगता है कि बेहतर प्रयोज्य दे देंगे आपके ऐप पर

वर्तमान कार्यान्वयन ठीक दिखता है। हालांकि आप इस बात का पालन करके इसे सुधार सकते हैं- https://www.youtube.com/watch?v=BlkJzgjzL0c

1

यदि आप मॉडल व्यू कंट्रोलर समस्या के रूप में इसके बारे में सोचते हैं, तो यहां समस्या यह है कि सेवा की स्थिति का प्रतिनिधित्व करने के लिए मॉडल की कमी है। जब सेवा ताज़ा कर रही है, तो इस "राज्य" को आपके यूआई में प्रतिबिंबित करने की आवश्यकता है। इस प्रकार सेवा को कहीं भी रिकॉर्ड करने की आवश्यकता है कि यूआई पहुंच सकता है।

एक विकल्प केवल साझा स्मृति का एक टुकड़ा है, जैसे सिंगलटन ऑब्जेक्ट या यहां तक ​​कि स्थिर सदस्य चर (अनुशंसित नहीं)। एक और विकल्प है कि उस स्थिति को अपने डेटाबेस में रखना है।

एक और मुद्दा यूआई को सूचित करते समय यूआई को सूचित कर रहा है। जैसा कि अन्य पदों के अनुसार किया गया है, ऐसा करने के कई तरीके हैं जैसे स्थानीय ब्रॉडकास्ट, ओटो, कंटेंट ऑब्सर्वर इत्यादि जैसी संदेश बस

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