सेवा, Async टास्क और थ्रेड में क्या अंतर है। अगर मैं गलत नहीं हूँ तो उन सभी का उपयोग पृष्ठभूमि में कुछ सामान करने के लिए किया जाता है। तो, कैसे तय करें कि किसका उपयोग करना है और कब?
सेवा, Async टास्क और थ्रेड में क्या अंतर है। अगर मैं गलत नहीं हूँ तो उन सभी का उपयोग पृष्ठभूमि में कुछ सामान करने के लिए किया जाता है। तो, कैसे तय करें कि किसका उपयोग करना है और कब?
जवाबों:
संभवतः आप पहले से ही उनके बारे में दस्तावेज़ीकरण विवरण पढ़ चुके हैं, मैं उन्हें नहीं दोहराऊंगा, इसके बजाय मैं अपने शब्दों के साथ जवाब देने की कोशिश करूंगा, आशा है कि वे आपकी मदद करेंगे।
सेवा एक गतिविधि की तरह है, लेकिन इसका कोई उपयोगकर्ता इंटरफ़ेस नहीं है। संभवतः यदि आप उदाहरण के लिए मौसम लाना चाहते हैं तो आप इसके लिए कोई रिक्त गतिविधि नहीं बनाएंगे, इसके लिए आप किसी सेवा का उपयोग करेंगे।
एक धागा एक धागा है, शायद आप पहले से ही इसे दूसरे भाग से जानते हैं। आपको यह जानना होगा कि आप थ्रेड से UI को अपडेट नहीं कर सकते। आपको इसके लिए एक हैंडलर का उपयोग करने की आवश्यकता है, लेकिन आगे पढ़ें।
एक AsyncTask एक बुद्धिमान थ्रेड है जिसका उपयोग करने की सलाह दी जाती है। बुद्धिमान है क्योंकि यह इसके तरीकों में मदद कर सकता है, और यूआई थ्रेड पर चलने वाले तीन तरीके हैं, जो यूआई घटकों को अपडेट करने के लिए अच्छा है।
मैं अक्सर सेवाओं, AsyncTasks का उपयोग कर रहा हूं। थ्रेड कम, या बिल्कुल नहीं, क्योंकि मैं लगभग सब कुछ AsyncTask के साथ कर सकता हूं।
यह आपके प्रश्न का सबसे आसान उत्तर है
धागा
निष्पादन की एक इकाई है जो "थ्रेड" को मुख्य थ्रेड पर चलाता है एक महत्वपूर्ण बिंदु है, आप किसी भी थ्रेड से यूआई घटक को किसी भी थ्रेड को छोड़कर यहां अपडेट नहीं कर सकते।
AsyncTask
एक विशेष धागा है, जो आपको यूआई को अपडेट करने के लिए सहायक तरीके देता है, इसलिए मूल रूप से आप यूआई को अपडेट कर सकते हैं यहां तक कि AsyncTask एक पृष्ठभूमि थ्रेड पर चलेगा। इंटरप्रोसेस संचार हैंडलिंग स्पष्ट रूप से किए जाने की आवश्यकता नहीं है।
सर्विस
उपरोक्त समस्या को हल करें क्योंकि यह उस गतिविधि से अलग रहती है जो इसे लागू करती है, इसलिए यह तब भी चलती रह सकती है जब गतिविधि नष्ट हो जाती है, यह मेन थ्रेड में चलती है (ANR से सावधान) एक पृष्ठभूमि सेवा का उपयोग करें (IntentService का विस्तार करें) यह स्वचालित रूप से कार्यकर्ता थ्रेड बनाता है तुम्हारे लिए) । सेवा यूआई के बिना एक गतिविधि की तरह है , लंबे कार्य के लिए अच्छा है
कुछ और जानकारी मैं चाहता हूँ कि किसी ने मुझे कुछ दिन पहले बताया था:
मेरा उपयोग मामला इस तरह है: मेरे पास वैश्विक स्थान में एक धागा है जो सर्वर और एक गतिविधि से जुड़ा है जो परिणाम दिखाता है। जब उपयोगकर्ता होम बटन दबाता है, तो गतिविधि पृष्ठभूमि पर जाती है और एक नई सेवा शुरू की जाती है। यह सेवा तब थ्रेड से परिणाम पढ़ती है और आवश्यक होने पर सूचना क्षेत्र में जानकारी प्रदर्शित करती है। मुझे अपनी गतिविधि को नष्ट करने वाले ओएस के बारे में चिंता नहीं है क्योंकि मुझे पता है कि जब तक सेवा चल रही है तब तक यह थ्रेड को नष्ट कर देगा।
डेवलपर के दृष्टिकोण से:
धागा : सेट को अंजाम देने के लिए मुख्य धागे में समान रूप से कोड का उपयोग किया जाता है। लेकिन आप थ्रेड के अंदर UI को नहीं संभाल सकते। इसके लिए आपको उपयोग करने की आवश्यकता है Handler
। हैडलर धागे की तरह काम करता है लेकिन यूआई को भी संभाल सकता है।
ASyncTask : उन कार्यों को संभालने के लिए उपयोग किया जाता है जिन्हें आप मुख्य थ्रेड पर काम करने के लिए नहीं बना सकते हैं। उदाहरण के लिए, एक HTTP अनुरोध बहुत भारी काम है जिसे मुख्य धागे पर संभाला नहीं जा सकता है, इसलिए आप HTTP अनुरोध ASyncTask
को अपने मुख्य धागे के साथ समानांतर रूप से पृष्ठभूमि में असिंक्रोनस तरीके से काम करता है। इसमें कुछ कॉलबैक विधियां हैं जो उनके अनुरूप हैं। आयोजन।
सेवा : एक पृष्ठभूमि प्रक्रिया है। यह तब नियोजित किया जाता है जब आपको कुछ ऐसी प्रोसेसिंग करनी होती है जिसमें कोई UI नहीं जुड़ा होता है।
Service
जब तक आप उपयोग नहीं करते तब तक पृष्ठभूमि में आवश्यक रन नहीं होगा IntentService
। यदि आपने Service
UiThread से एक standart शुरू किया है तो यह UiThread पर चलेगा।
Service
डिफ़ॉल्ट रूप से एक अलग प्रक्रिया में नहीं चलेगा, लेकिन अन्य घटकों के साथ ऐप प्रक्रिया में। यह कहने के लिए बेहतर है कि Service
थ्रेड की पृष्ठभूमि में चलेगा कि यह अंदर रहता है।