AsyncTaskLoader बनाम AsyncTask


129

चूंकि Honeycombऔर v4 Compatibility Libraryइसका उपयोग करना संभव है AsyncTaskLoader। मैं जो समझता हूं, वह AsyncTaskLoaderस्क्रीन के फ़्लिप जैसे कॉन्फ़िगरेशन परिवर्तनों से बच सकता है।

क्या इसके AsyncTaskLoaderबजाय उपयोग करने की सिफारिश की गई है AsyncTask? करता है LoaderManagerचित्र में भी मिल सकता है?

लेकिन मुझे सही तरीके से उपयोग करने के बारे में कोई अच्छा उदाहरण नहीं मिला है AsyncTaskLoader। डॉक्स भी कोई उदाहरण नहीं देते हैं। क्या कोई कुछ अच्छे उदाहरण प्रदान कर सकता है।

जवाबों:


51

अधिक जानकारी प्राप्त करने के लिए आप संगतता लाइब्रेरी के स्रोत कोड पर एक नज़र डाल सकते हैं। एक FragmentActivityक्या है:

  • की एक सूची रखने LoaderManagerके
  • सुनिश्चित करें कि जब आप अपने फोन को फ्लिप करते हैं (या कोई अन्य कॉन्फ़िगरेशन परिवर्तन तब होता है) का उपयोग करके बचत करके उन्हें नष्ट नहीं किया जाता है onRetainNonConfigurationInstance()
  • जब आप initLoader()अपनी गतिविधि में कॉल करते हैं तो सही लोडर को किक करें

आपको LoaderManagerलोडर के साथ इंटरफेस करने के लिए उपयोग करने की आवश्यकता है , और अपने लोडर (ओं) को बनाने के लिए आवश्यक कॉलबैक प्रदान करें और वे जिस डेटा पर लौटते हैं, उसके साथ अपने विचारों को आबाद करें।

आम तौर पर यह AsyncTaskअपने आप को प्रबंधित करने से आसान होना चाहिए । हालाँकि, AsyncTaskLoaderबिलकुल अच्छी तरह से प्रलेखित नहीं है, इसलिए आपको डॉक्स में उदाहरण का अध्ययन करना चाहिए और / या बाद में अपना कोड मॉडल करना चाहिए CursorLoader


5
इस पर मेरी नजर रहेगी। शायद इसके बारे में अच्छे उदाहरण ढूंढना जल्दबाजी होगी AsyncTaskLoader, और जब अधिक डेवलपर्स इसका उपयोग करना शुरू करेंगे, तो अधिक उदाहरण आएंगे।
OKA

47

जब आप अपने डिवाइस की स्क्रीन को घुमाते समय AsyncTaskLader बनाम AsyncTask की तुलना करते हैं, तो यह आपकी गतिविधि को नष्ट कर सकता है और फिर से बना सकता है, यह स्पष्ट करने के लिए कि नेटवर्क लेन-देन करते समय छवि को आपके डिवाइस को घुमाए:

AsyncTask को बैकग्राउंड थ्रेड के रूप में फिर से निष्पादित किया जाएगा, और पिछले बैकग्राउंड थ्रेड प्रसंस्करण केवल निरर्थक और ज़ोंबी होगा।

AsyncTaskLoader लोडर आईडी पर बस फिर से उपयोग किया जाएगा जो पहले लोडर प्रबंधक में पंजीकृत है, इसलिए नेटवर्क लेनदेन को फिर से निष्पादित करने से बचें।

सारांश में, AsyncTaskLoader पृष्ठभूमि थ्रेड के दोहराव को रोकते हैं और ज़ोंबी गतिविधियों के दोहराव को समाप्त करते हैं।


11

AsyncTaskLoader प्रदर्शन के रूप में ही समारोह AsyncTask , लेकिन थोड़ा बेहतर है। यह गतिविधि कॉन्फ़िगरेशन परिवर्तनों को अधिक आसानी से संभाल सकता है, और यह जीवन चक्र और गतिविधियों के चक्र के भीतर व्यवहार करता है। अच्छी बात यह है कि AsyncTaskLoader का उपयोग किसी भी स्थिति में किया जा सकता है जो AsyncTask का उपयोग किया जा रहा है। गतिविधि / फ्रैगमेंट को संभालने के लिए किसी भी समय डेटा को मेमोरी में लोड करना होगा, The AsyncTaskLoader कार्य को बेहतर तरीके से कर सकता है।

हालांकि, AsyncTasks का उपयोग करने के साथ कुछ समस्याएं हैं:

  • कॉन्फ़िगरेशन परिवर्तन चीजों को गड़बड़ कर सकते हैं
  • किसी गतिविधि को रोकना AsyncTask को विराम नहीं देता है
  • बॉयलरप्लेट कोड की एक उचित मात्रा (जिसका अर्थ है अधिक संभावित त्रुटियां)

AsyncTaskLoader डॉक्टर


8

अन्य उत्तरों में वर्णित कुछ अंतरों के अलावा:

का उपयोग करते समय AsyncTaskLoader से अधिक AsyncTask :

  • AsyncTaskLoader हमें पुराने कैश्ड डेटा को लोड करने की स्वतंत्रता देता है जब तक कि नया डेटा वापस नहीं आताforceLoad()

  • हम AsyncTaskLoader में देरी सेट कर setUpdateThrottle()सकते हैं जिसके द्वारा ग्राहक को लगातार अपडेट को रोका जा सकता है (गतिविधि / टुकड़ा)

  • AsyncTaskLoader को कई टुकड़ों में साझा किया जा सकता है यदि उनके पास सामान्य अभिभावक गतिविधि है और यदि वह इससे शुरू किया गया हैgetActivity().getSupportLoaderManager()

  • AsyncTaskLoaderLoaderManger तब नष्ट हो जाता है जब इसकी लिंक्ड गतिविधि उपलब्ध नहीं होती है। यदि हमें इसकी कॉल गतिविधि को नष्ट कर देता है तो हमें AsyncTasks को मैन्युअल रूप से नष्ट करने की आवश्यकता है । यह हमारे समय को सभी समाशोधन सामग्री को लिखने से बचाता है। AsyncTaskLoader अपने संबंधित जीवन चक्रों के साथ अच्छा खेलता है।

इसलिए, AsyncTaskLoader, AsyncTask से बेहतर है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.