2011-03-18 13 views
7

के बारे में जानकारी के लिए एक इरादा सेवा पूछना मेरे पास एक इरादा सेवा है जो वेब सेवा कॉल को कतारबद्ध करती है जिसे मेरे वेब सर्वर पर करने की आवश्यकता है। तो प्रत्येक इरादा एक वेब सेवा कॉल किया जाना है।अपनी कतार

मैं कुछ ऐसा सेट अप करना चाहता हूं जहां मेरा एप्लिकेशन इस इराद सेवा से पूछ सकता है यदि उसके पास डेटा का एक विशेष भाग वाला कोई इरादा है (आईई: "क्या आप पहले ही एक्स डेटा के लिए क्लाउड से पूछने का इंतजार कर रहे हैं? या मुझे चाहिए आपको यह करने के लिए कहने के लिए? ")।

क्या कोई सुझाव है कि मैं यह करने के लिए IntentService कैसे बढ़ा सकता हूं? क्या किसी इरादे सेवा का इरादा कतार पार हो सकता है? या मुझे इरादा सेवा कोड लेने और इसे बदलने की आवश्यकता होगी?

मेरे पास एकमात्र अन्य विचार है जो डेटाबेस में एक टेबल जोड़ना है और कतार में कौन सी कॉल लॉग हैं, लॉग इन होने पर प्रत्येक लॉग को तालिका से निकाल दिया जाता है।

उत्तर

19

वहाँ कैसे मैं IntentService का विस्तार हो सकता है यह करने के लिए पर कोई सुझाव हैं? क्या किसी इरादे सेवा का इरादा कतार पार हो सकता है? या मुझे इरादा सेवा कोड लेने और इसे बदलने की आवश्यकता होगी?

शायद बाद वाले, यदि आप वास्तव में वास्तविक कतार की जांच करना चाहते हैं। IntentService के संदेश कतार पर HandlerThread के माध्यम से संदेश में Intents को बदल देता है। हालांकि, इनमें से कोई भी एसडीके के माध्यम से खुलासा नहीं हुआ है। सौभाग्य से, IntentService काफी छोटा है - यहां तक ​​कि 150 लाइनें भी नहीं। आप इसे अपने पैकेज में क्लोन कर सकते हैं और आवश्यकतानुसार संशोधन कर सकते हैं। जब एओएसपी रिपोजिटरी में नए स्रोत अपडेट जारी किए जाते हैं तो बस स्रोत पर एक अंतर चलाएं, ताकि आप जान सकें कि Google ने IntentService पर कोई भी प्रमुख सर्जरी की है जिसे आप लाभ लेना चाहते हैं।

मेरे पास एकमात्र अन्य विचार है जो डेटाबेस में एक टेबल जोड़ना है और कतार में कौन सी कॉल लॉग हैं, लॉग इन होने पर तालिका से प्रत्येक लॉग को हटा दिया जाता है।

इसे IntentService की स्वयं की कतार लगातार नहीं होने के कारण भी ऐसा होने की आवश्यकता नहीं होगी। के अंत में कतार से Intent को अपने सुपरफ़ास पर चेन करने और Intent पॉपिंग करने पर बस अपनी खुद की फीफो कतार onStartCommand() में बनाए रखें। इसमें मास्टर कतार के साथ समन्वयित होने का मौका है (उदाहरण के लिए, आप finally का उपयोग करना चाहते हैं ताकि आप यह सुनिश्चित कर सकें कि आप अपनी खुद की कतार से काम बंद कर दें), लेकिन आपको कक्षा को क्लोन करना पड़ेगा।

+0

महान पद के लिए प्रेरणा पाया जाता है। मुझे लगता है कि अब मेरे पास अन्वेषण करने के लिए कुछ अच्छे विचार हैं। धन्यवाद :) – Andrew

+1

इस पोस्ट के लिए आपको बहुत बहुत धन्यवाद। मैंने इस वर्ग के एक संस्करण को लागू करने से रोक दिया है, यदि यह पहले से ही कतार में है, लेकिन अगर यह आवश्यक हो तो इसे आसानी से tweaked किया जा सकता है https://gist.github.com/2898452 – SeanPONeil

+1

कार्य कोड के लिए धन्यवाद। एकमात्र जोड़ा जो मैंने बनाया था वह एक डिफ़ॉल्ट तरीका है जो एक्वाल विधि है जो फ़िल्टर एक्वाल्स का उपयोग करता है, जिसके बाद मुझे इसे ओवरराइड करने की इजाजत मिली ताकि मैं कुछ अतिरिक्त अतीत की तुलना में इरादे में तुलना कर सकूं, क्योंकि मेरे सभी इरादों की क्रिया समान है। ओह मैंने अपना संस्करण UniqueIntentService भी कहा :) – guyland123

1

एक और समाधान इसे स्टार्टकॉमैंड पर ओवरराइड करके हल करने के लिए किया जा सकता है।

Here एक चिकनी समाधान जिसमें मैं एक ऐसी ही समस्या :)

+0

लेकिन जब मैंने नज़दीक देखा तो मुझे एहसास हुआ कि आपने उस प्रश्न को भी पोस्ट किया है :) – johan