2011-10-04 14 views
5

asynctasks का उपयोग करने का सही तरीका क्या है? मान लीजिए कि कोई उपयोगकर्ता एक गतिविधि में प्रवेश करता है, और एसिंक्टास्क शुरू होता है, और जब एसिन्टास्क चल रहा है, तो उपयोगकर्ता दूसरे पृष्ठ पर नेविगेट करने का निर्णय लेता है।एंड्रॉइड - AsyncTasks का उपयोग करने का सही तरीका?

  • किसी भी एक्टकास्क के साथ क्या होने वाला है? क्या यह तब तक चलने वाला है जब तक यह नहीं हो जाता?
  • क्या मैं इस एसिंकस्क को किसी भी तरह से रोकने के लिए ज़िम्मेदार हूं?

उत्तर

5

asynctask चल रहा रहेगा। Asynctask मर सकता है क्योंकि एंड्रॉइड ओएस कम चल रहा है जब स्मृति पुनः प्राप्त करने की कोशिश करता है। यदि आपको परवाह नहीं है कि एसिंक कार्य खत्म नहीं हो सकता है, तो शायद इससे कोई फर्क नहीं पड़ता, लेकिन यह खराब अभ्यास है।

इसके अलावा, हो सकता है कि जब आप परिणाम को संग्रहीत/संभालने के तरीके के आधार पर एसिंक कार्य मर जाएंगे, तो आप उस गतिविधि में किसी गतिविधि/ऑब्जेक्ट को संपादित करने का प्रयास करने का जोखिम उठाते हैं जो नतीजे नहीं है, जिसके परिणामस्वरूप नलपॉइंटटेरेक्सप्शन और अन्य बुरी चीजें होती हैं। उचित ऐसा करने का तरीका सेवा आपकी गतिविधि से शुरू करना होगा और सेवा से एसिंकक्ट शुरू करना होगा। आप इस बात गूगल आईओ पर दिया 2010 में उल्लिखित डिजाइन पैटर्न में से एक का पालन करना चाहिए:

Android REST Client Design Patterns

यह दिलचस्प बात है, लेकिन पालन करने के लिए कठिन है और कोई कोड देता है, तो यहाँ एक अच्छा ट्यूटोरियल है कि मैं जानने के लिए प्रयोग किया जाता है इस सामग्री:

Downloading Data with Services

इसके अलावा, एंड्रॉयड आप के लिए अपने asynch कार्यों की एक ThreadPool का प्रबंधन करेगा (मैं विश्वास है कि यह उनकी हत्या शुरू कर देंगे, जब आप अपने प्रक्रिया में अधिक से अधिक 5 हैं) तो आप की जरूरत नहीं है मार डालो। यहाँ जवाब की जाँच:

How AsyncTasks die

0

खैर बीमार कोशिश तेजी से होने के लिए:

  • आप अगर बुरा असर आपके प्रोग्राम प्रभाव नहीं कर रही एक asynctask को रोकने के लिए जिम्मेदार होना चाहिए। this पढ़ें।

  • आपका asynctask अपने जीवन onPreExecute() कर गुजरेगा - doInBackground (पैरामीटर ...) - onPostExecute (परिणाम) asynctask जीवन

  • Asynctask के अंत में केवल एक बार निष्पादित करने के लिए यदि आप किया गया है, तो चाहते हैं कि किसी अन्य समय पर अमल आप बनाना होगा एक और एक
0
  1. हाँ, AsyncTask यदि आप किसी अन्य गतिविधि के लिए नेविगेशन पर यह नहीं रोका चलना जारी रहेगा। डिवाइस की कॉन्फ़िगरेशन में परिवर्तन होने पर भी यह चलना जारी रहेगा (उदा। यह घुमाता है)। यदि आप postExecute() पर कुछ करना चाहते हैं जिसका यूआई पर असर पड़ता है, तो आपको यह सुनिश्चित करना होगा कि यूआई विगेट्स के संदर्भ जो आप इस विधि में संशोधित करते हैं, वे गतिविधि के पुनर्निर्मित होने पर घूर्णन के बाद भी वैध हैं।

  2. हां, अगर आपको इसकी आवश्यकता नहीं है तो आप रोकने के लिए ज़िम्मेदार हैं (यानी, .cancel()) आप AsyncTask। ध्यान दें कि, इसके निष्पादन के बीच में एक AsyncTask केवल इसलिए नहीं रुक जाएगा क्योंकि आपने उस पर .cancel() कहा था। यह चलना जारी रहेगा, लेकिन कार्य पूरा होने पर इसकी पोस्टएक्सक्यूट() विधि को नहीं बुलाया जाएगा।

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