2012-05-13 14 views
5

मैं एंड्रॉइड डेवलपर ब्लॉग Process and Threads में एक लेख पढ़ रहा था जो आवेदन के विशिष्ट घटक के लिए नई प्रक्रिया बनाने के बारे में बात करता है। लेकिन मैं समझने में नाकाम रहा कि मेरे आवेदन में एक नई प्रक्रिया कब एक पूर्ण आवश्यकता बन जाएगी। क्या आप कृपया इस संबंध में निम्नलिखित संदेहों को समझने में मेरी सहायता कर सकते हैं।किसी को एप्लिकेशन में एक अलग प्रक्रिया बनाने की आवश्यकता कब होगी?

  1. जब डेवलपर के रूप में मुझे महसूस करना चाहिए कि मुझे एंड्रॉइड घटक/एस के लिए एक अलग प्रक्रिया की आवश्यकता है?
  2. क्या एक नई प्रक्रिया शुरू करने से आवेदन के समग्र प्रदर्शन पर कोई दुष्प्रभाव होता है?

कोई अन्य जानकारी बहुत सराहना की है।

धन्यवाद, SKU

+0

ऐसा लगता है कि यह स्टैक ओवरफ्लो थ्रेड बेहतर दस्तावेज है: [इस लिंक का पालन करें:)] (https://stackoverflow.com/questions/4658511/android-how-to-decide-whether-to-run-a-service- एक अलग-अलग प्रक्रिया) – Tobliug

उत्तर

0

1.) आप अलग प्रक्रिया पर कुछ करना या धागे जैसे ही आप ऐप्लिकेशन धीरे चल रहे नहीं करना चाहती की जरूरत है। धागे को पेश करके आप अपने ऐप को यूआई थ्रेड पर चलाने के लिए मजबूर नहीं करते हैं। इस प्रकार आपके ऐप को अन्य घटनाओं के प्रति उत्तरदायी बनाते हैं। उदाहरण के लिए: जब आप वेब सेवा से कुछ डेटा प्राप्त करते हैं तो आप थ्रेड का उपयोग कर सकते हैं ताकि यह पृष्ठभूमि में हो और आपके ऐप को प्रभावित न करे।

2.) थ्रेड का उपयोग नहीं किया जाना चाहिए .. हमें एंड्रॉइड में AsyncTask या लोडर का उपयोग करना चाहिए।

+2

मैं समझता हूं और अपने अनुप्रयोगों में एक अलग थ्रेड (हैंडलर, असिनकटास्क और वर्कर थ्रेड के रूप में) का उपयोग करने के लाभों का आनंद लिया है। लेकिन इसका कोई मतलब नहीं है कि ऊपर उल्लिखित फैशन में कोई नया धागा बनाना एक नई प्रक्रिया तैयार करेगा। क्या आपको लगता है कि एक अलग प्रक्रिया का उपयोग करना ऐसे धागे को समूहित करना है जिनमें आम संसाधन उपयोग है? – sku

+0

नहीं, विभिन्न अनुप्रयोगों में घटकों को एक ही प्रक्रिया साझा करने की अनुमति देने से संसाधनों को कम करने में मदद मिलती है। नई प्रक्रिया बनाने से संसाधन उपयोग में वृद्धि होगी लेकिन कभी-कभी यह असफल हो सकती है। उदाहरण के लिए आप अपने सीरिस को चलाना चाहते हैं भले ही ऐप विभिन्न प्रक्रियाओं में चल रहा हो। – Rookie

+0

मैं नहीं कहूंगा कि धागे का उपयोग नहीं किया जाना चाहिए। AsyncTask कार्य के विशिष्ट प्रकार को प्रोग्रामेटिक रूप से प्राप्त करने के लिए बहुत आसान बनाता है उदा। कुछ कार्य जिसमें निष्पादन की एक सीमित अवधि होती है जिसे मुख्य थ्रेड पर नहीं किया जाना चाहिए जैसे फ़ाइल डाउनलोड करना। – Kerry

0

1.) एंड्रॉइड 4.0 (और संभवतः 3.0, हालांकि सुनिश्चित नहीं है) में डिवाइस आपको मुख्य थ्रेड में HTTP एजेंट का उपयोग करने की अनुमति नहीं देता है, क्योंकि यह UI को धीमा करता है .. यह तब होता है जब धागे काम में आते हैं।

सीपीयू के बहुत सारे कार्यों के उपयोग के साथ, यदि ये यूआई थ्रेड में चलाए जाते हैं, तो यूआई अंतराल हो जाएगा और फ़ंक्शन समाप्त होने तक प्रतिक्रिया नहीं देगी।

2.) के रूप में 1 में कहा गया है, यह वास्तव में अपने अनुप्रयोग के दृश्य प्रदर्शन में सुधार होगा;)

+1

हाय Wampie, मुझे समझ में आता है कि मुझे समय लेने वाले परिचालनों के लिए एक अलग धागा क्यों है। लेकिन मैं समझने में असफल रहा कि किसी को एंड्रॉइड के किसी भी घटक के लिए अलग प्रक्रिया की आवश्यकता क्यों है। आपके आवेदन में नए थ्रेड मौजूदा एप्लिकेशन प्रक्रिया में तब तक बनाए जाएंगे जब तक अन्यथा निर्दिष्ट नहीं किया जाता है। मैं अभी भी एक जवाब खोज रहा हूं "क्यों एक को अलग प्रक्रिया पूरी तरह से करने की आवश्यकता है" – sku

+2

प्रक्रिया! = धागा – Ethan

1

एक अलग प्रक्रिया के बाद उपयोगी यदि आपके आवेदन के घटकों चलाना जरूरी है कि दोनों की जरूरत नहीं है कर रहे हैं हो सकता है उपयोगकर्ता के लिए उपयोगी होने के लिए, और पृष्ठभूमि कार्य "शुद्धता" (या तो भविष्य में या भविष्य में) के लिए महत्वपूर्ण है। इसका क्लासिक उदाहरण एक ऐप है जिसमें एक ऐसी सेवा है जहां सेवा आपके एप्लिकेशन के लिए महत्वपूर्ण कुछ डेटा सहेजती या अपलोड करती है (महत्वपूर्ण अर्थ यह है कि डेटा वापस पाने का एकमात्र तरीका यह है कि उपयोगकर्ता इसे फिर से दर्ज कर लेता है!)। यह सेवा डेटा अपलोड करने या सहेजने जैसी कुछ करने के लिए ज़िम्मेदार हो सकती है, जबकि गतिविधि उपयोगकर्ता के लिए इंटरफ़ेस है। इसलिए डेवलपर्स को मेरे अगले बिंदु से उत्पन्न होने वाली समस्याओं को रोकने के लिए इन दो घटकों को कम करना चाहिए ..

एंड्रॉइड को एक संसाधन (विशेष रूप से स्मृति) बाधित वातावरण में चलाने के लिए डिज़ाइन किया गया था, इसलिए प्रक्रियाओं को समय-समय पर मारने के लिए स्मृति को खोलने के लिए मारे गए "कम मेमोरी किलर" (एलएमके) द्वारा महत्वपूर्ण लोग (यदि आप इसे Google करते हैं तो आपको इस विषय पर बहुत सारी जानकारी मिल जाएगी)। अग्रभूमि प्रक्रियाओं जैसी चीजें समझ में आती हैं क्योंकि वे वर्तमान में उपयोग में हैं, लेकिन कभी-कभी उन्हें बहुत अधिक स्मृति लेने जैसे कारणों से भी मार दिया जाता है। अब, कल्पना करें कि उपयोगकर्ता को ऐप में कुछ करने के बाद डेटाबेस में कुछ डेटा सहेजने की ज़रूरत है और आप ऐसा करने के लिए ऐसा करने के लिए एक सेवा का उपयोग करते हैं ताकि यह सुनिश्चित किया जा सके कि उपयोगकर्ता ऐप से दूर निकलता है। जब तक आप अपनी प्रक्रिया में सेवा नहीं बनाते हैं, तब तक प्रक्रिया में गतिविधि और सेवा दोनों की प्रक्रिया को मारने की संभावना है क्योंकि प्रक्रिया गैर-अग्रभूमि गतिविधि से संबंधित है। हालांकि सेवा को अपनी प्रक्रिया में रखना हमेशा जरूरी नहीं है, कई बार बस सेवा देने का अपना धागा पर्याप्त होगा; यह बहुत ही विशिष्ट अनुप्रयोग है।यदि पृष्ठभूमि में कुछ कार्य करने के लिए और उस कार्य से संबंधित कुछ कार्य करने के लिए मैं केवल कुछ सेकंड (लंबे समय तक उपयोगकर्ता को मेरे आवेदन से दूर करने के लिए और एलएमके के लिए कदम उठाने के लिए पर्याप्त) से अधिक समय लेता है, तो मैं केवल अपनी प्रक्रिया में एक सेवा रखूंगा मेरे आवेदन की "शुद्धता" (बाद में डेटा सहेजने वाला आईई)। कैशिंग जैसे कुछ के लिए, धागे से चिपके रहें, क्योंकि यदि प्रक्रिया समय-समय पर मारे जाती है तो आप बाद में उस डेटा को फिर से बना सकते हैं।

एक अलग प्रक्रिया होने का एक अन्य कारण यह है कि यदि आप वैश्विक सेवा चला रहे हैं (एक ऐसी सेवा जो आपके अलावा अन्य अनुप्रयोगों द्वारा उपयोग की जा सकती है) हो सकता है कि आप कॉन्फ़िगरेशन के लिए एक गतिविधि के माध्यम से एक इंटरफ़ेस प्रदान कर सकें।

प्रदर्शन प्रश्न के लिए, निश्चित रूप से इस तरह के कुछ के लिए प्रदर्शन हिट होगा। इंटरप्रोसेस संचार सस्ता नहीं है, इसलिए आपको वास्तव में केवल एक अलग प्रक्रिया का उपयोग करना चाहिए यदि आप उपरोक्त वर्णित विशिष्ट उपयोग मामले में फिट होते हैं। साथ ही, प्रक्रिया को बनाए रखने के लिए मेमोरी ओवरहेड की एक निश्चित राशि है, इसलिए यह एक और प्रदर्शन हिट है।

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