2011-09-11 7 views
6

पर पहले इराद सेवा उद्देश्यों को कैप्चर करना मेरे पास एक इरादा सेवा है जो वेब सेवा कॉल करने के लिए कतारबद्ध करती है। मैं प्रत्येक इंटेंट के साथ अतिरिक्त के रूप में एक पूर्णांक पास करता हूं जो वेब सेवा कॉल के प्रकार को परिभाषित करता है।हैंडलइन्टेंट

मैं ऐसी स्थिति बनाना चाहता हूं, यदि कोई विशेष वेब सेवा करने का इरादा IntentService को पास किया गया हो और उसी वेब सेवा के लिए एक इरादा पहले से ही IntentService कतार में मौजूद है, तो इरादा संसाधित नहीं होता है। आदर्श रूप में, मैं इरादे को फेंक दूंगा, लेकिन मैं इसमें अतिरिक्त भी जोड़ सकता हूं जो कोड को संभालने के बाद इरादे को छोड़ने की जानकारी देता है। जैसे-जैसे इरादे आते हैं, मैं ट्रैक कर सकता हूं कि किसी ऑब्जेक्ट में कतार में कौन से हैं I intentService में जोड़ते हैं।

हालांकि, मुझे इरादा सेवा को पारित होने पर इरादे के अधिकार को रोकने के लिए कोई जगह नहीं दिखाई देती है। जहां तक ​​मैं कह सकता हूं, मैं इसे केवल तब स्पर्श कर सकता हूं जब हैंडलइन्टेंट को बुलाया जाता है और यह बहुत देर हो जाएगी।

कोई विचार?

उत्तर

5

इसका सख्ती से उचित नहीं बोल रहा है, लेकिन मैं कुछ इस तरह का सुझाव चाहते हैं:

public int onStartCommand (Intent intent, int flags, int startId) 
{ 
    // do your intent modification here 
    //if(intentIsDuplicate(intent)) 

    // make sure you call the super class to ensure everything performs as expected 
    return super.onStartCommand(intent, flags, startId); 
} 

मुझे पता है कि अगर काम करता है।

+0

मैंने इस विधि को IntentService प्रलेखन पर देखा, लेकिन जब इसे कहा जाता है तो मुझे पूरा यकीन नहीं था। मैंने यह भी देखा कि इसे ओवरराइड नहीं किया जाना है। कोई विचार क्यों? – Andrew

+0

मूल रूप से आंतरिक 'ऑनस्टार्ट कमांड' कॉल शायद कतार में संभालती है: यदि आप इसे ओवरराइड करते हैं और सुनिश्चित करते हैं कि आप वास्तव में सुपरक्लास की विधि को कॉल करते हैं तो आपको ठीक होना चाहिए। – Femi

+0

यह ठीक काम कर रहा प्रतीत होता है। मैं एक नक्शा रखता हूं जहां कुंजी एक इंटीजर है जिसे वेब सेवा के प्रकार का प्रतिनिधित्व किया जाता है और मूल्य एक बूलियन है जो उस कॉल के लिए एक कतार में मौजूद है या नहीं, यह दर्शाता है। ऑनस्टार्ट कमांड में मैं देखता हूं कि आने वाला इरादा एक कॉल के लिए है जो कतार में पहले से मौजूद है। यदि ऐसा होता है, तो मैं इसे "छोड़ने" नामक अतिरिक्त जोड़ता हूं। हैंडलइन्टेंट में, मैं "छोड़ें" की जांच करता हूं और यदि यह मौजूद है तो किसी भी कोड को छोड़ दें। लेकिन हैंडलइन्टेंट पर जाने से पहले मैं मानचित्र को अपडेट करता हूं और उस कुंजी के लिए मान को गलत पर सेट करता हूं। – Andrew