2011-08-22 10 views
20

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

उत्तर

12

this post में वर्णित अनुसार, IntentService और ResultReceiver के संयोजन की अनुशंसा करता हूं।

इसके अलावा Google iosched पर एक नज़र डालें जो इस मॉडल को लागू करता है। 2010 संस्करण दिखाता है कि onRetainNonConfigurationInstance, getLastNonConfigurationInstance और एक स्थिर वर्ग का उपयोग कर कॉन्फ़िगरेशन परिवर्तनों (यानी स्क्रीन रोटेशन) के पार ResultReceiver को कैसे बनाए रखें।

मैंने इस मॉडल को सफलतापूर्वक एप्लिकेशन में कार्यान्वित किया है। अगर आपको दिए गए लिंक के साथ कोई समस्या है तो मुझे बताएं।

संपादित करें: मैं "क्यों" प्रश्न भूल गया;)

AsyncTask tighly गतिविधि के लिए बाध्य है और यह अच्छी तरह विन्यास बदलाव संभाल नहीं होंगे। गतिविधि जीवन के भीतर छोटे कार्यों के लिए यह ठीक है (onResume और के बीच)। मैं HttpClient का उपयोग अपने आरईएसटी एपीआई कॉल के लिए कनेक्शन टाइमआउट और सॉकेट टाइमआउट 20 के सेट (खराब मोबाइल नेटवर्क के कारण ...) के साथ कर रहा हूं। इसका मतलब है कि एपीआई कॉल 40 के दशक तक चल सकता है। आप निश्चित रूप से AsyncTask की बजाय किसी सेवा में ऐसे लंबे कार्य को संभालना चाहते हैं।

+0

मेरे पास @ हेलॉयय के लिए एक प्रश्न है, तो फिर मैं इंटेंट सेवा को ऑनर्यूसम(), ऑनस्टार्ट(), या ऑनक्लिकएवेंट लिस्टनर() कब शुरू करूंगा क्योंकि मुझे ऑफ़लाइन उपयोग के लिए साझाप्रेफ़रेंस का उपयोग करके स्थानीय रूप से सहेजने की आवश्यकता है। उदाहरण के लिए कहें मुझे वेबसाइट सेवा (डब्ल्यूसीएफ वेब एपीआई) का उपयोग कर सर्वर से यूआई में 200 छात्रों को सूचीबद्ध करने की आवश्यकता है, तो मैं कोड की इस पंक्ति को कहां रखूंगा // // प्रारंभ इरादा सेवा // रन इरादा सेवा // इरादा डाउनलोड इंटेंन्ट = नया इरादा (यह। कॉन्टैक्ट, टाइपऑफ (StudentIntentService)); //this.Context.StartService (downloadIntent); ' –

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