2012-01-26 14 views
8

यदि UI को अपडेट करने के लिए मुझे HTTP (या जो कुछ भी) के माध्यम से असीमित रूप से कुछ डेटा लोड करने की आवश्यकता है, तो मेरे पास एंड्रॉइड एप्लिकेशन लिखते समय कुछ विकल्प हैं (कई अन्य लोगों के बीच जो मुझे यकीन है कि मुझे याद आया):एंड्रॉइड Async डेटा लोडिंग विधियां

  1. UI को अपडेट करने के लिए नियमित थ्रेड और हैंडलर का उपयोग करें।

  2. AsyncTask

  3. उपयोग और IntentService, और या तो एक कॉलबैक का उपयोग करें या एक आशय के माध्यम से परिणाम प्रसारित।

  4. Loaders का उपयोग करना।

मैं क्या समझ से, एक IntentService एक गतिविधि के जीवनचक्र से बंधा नहीं है, इसलिए उन्मुखीकरण में कोई भी परिवर्तन, आदि, डेटा की पुनर्प्राप्ति पर असर नहीं पड़ेगा। जहां यह एक AsyncTask या थ्रेड को किसी गतिविधि के भीतर निकाल दिया गया है, तो यह मामला नहीं है।

प्रश्न का कारण यह है कि मैंने हाल ही में Loaders पढ़ा है, और मैं उनके आवेदन के रूप में उलझन में हूं। वे डेटा स्रोत से अधिक निकटता से जुड़े हुए प्रतीत होते हैं, जहां डेटा स्रोत बदलता है, तो "पारदर्शी रूप से" सब कुछ उचित तरीके से संभाला जाता है। Loaders विन्यास/अभिविन्यास परिवर्तनों (मुझे विश्वास है) के प्रति सहिष्णु प्रतीत होता है।

मैं वर्तमान में रीस्टफुल सेवा कॉल करने के लिए एक इरादा सेवा का उपयोग कर रहा हूं, और परिणाम उचित गतिविधियों द्वारा प्राप्त किए जाने वाले परिणामों को प्रसारित कर रहा हूं।

मुझे लगता है कि मैं एक HTTP आधारित लोडर लिख सकता हूं, लेकिन मुझे यकीन नहीं है कि यह इस तंत्र का सबसे अच्छा उपयोग है या नहीं।

किसी अन्य पर एसिंक डेटा लोडिंग विधियों में से किसी एक का उपयोग करने के फायदे/नुकसान क्या हैं?

+0

AsyncTaskLoader है अपने दोस्त http://www.vogella.de/articles/AndroidPerformance/article.html एक और उदाहरण http://stackoverflow.com/questions/8030102/कैसे-से-उपयोग-asynctask-with-xml-sax-parser –

+0

@ सर्गीबेनर AsyncTaskLoader के बारे में जानना अच्छा है। मैं समझने की कोशिश कर रहा हूं कि मैं एक विधि का उपयोग क्यों करूँगा, लेकिन यह जानना बहुत अच्छा है। – Steve

+0

http://developer.android.com/reference/android/os/AsyncTask.html से लिया गया AsyncTask UI थ्रेड के उचित और आसान उपयोग को सक्षम बनाता है। यह वर्ग पृष्ठभूमि संचालन करने और थ्रेड और/या हैंडलर में हेरफेर किए बिना यूआई थ्रेड पर परिणाम प्रकाशित करने की अनुमति देता है। –

उत्तर

2

इन सभी तंत्रों में बस विकल्प हैं। ऐसी कोई चीज नहीं है जैसे एक आकार सभी टूल फिट बैठता है और इसलिए एक ही कार्य को पूरा करने के इन सभी अलग-अलग तरीकों से जितना संभव हो उतना उपयोग मामलों को कवर करने का एक तरीका है।

आखिरकार, यह तय करने के लिए आप पर निर्भर है कि कौन सा तरीका आपके परिदृश्य के लिए अधिक समझ में आता है। लेकिन तुम क्या इस्तेमाल करना चाहिए के जेनेरिक स्पष्टीकरण का एक तरह ...

  1. नियमित धागा और एक हैंडलर के लिए - क्यों जब वहाँ अन्य, सरल, विकल्प क्या हैं?

  2. AsyncTask - चूंकि एक AsyncTask लगभग हमेशा एक गतिविधि पर निर्भर करेगा, जब आप डेटा को असीमित रूप से लोड करने की आवश्यकता होती है और आप 100% निश्चित रूप से कितना समय ले सकते हैं। उदाहरण: SQLite क्वेरी निष्पादित करना।

  3. इरादा सेवा/सेवा - सेवाएं एक एसिंक टास्क जैसी गतिविधि से बंधी नहीं हैं, इसलिए, वे उन परिदृश्यों के लिए बिल्कुल सही हैं, जिन्हें आप नहीं जानते कि इसे पूरा करने में कितना समय लगेगा। उदाहरण: वेब एपीआई से डेटा डाउनलोड करना और डेटाबेस अपडेट करना।

  4. लोडर - लोडर का उद्देश्य डेटा लोड करने की प्रक्रिया को सरल बनाना और इसे यूआई में पॉप्युलेट करना है। लोडर्स की प्रकृति की प्रकृति मानती है कि जो डेटा आप लोड करेंगे, उसे उपयोगकर्ता को किसी प्रकार की सूची के रूप में प्रस्तुत किया जाएगा।उदाहरण: डेटा डाउनलोड और एक ListView में पॉप्युलेट

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