2010-11-30 12 views
17

इन विधियों (कक्षाओं) के बीच अंतर क्या हैं?एंड्रॉइड असिंटास्क बनाम रननेबल बनाम टाइमर्टस्क बनाम सेवा

मैं एक ऐप चलाने के लिए चाहता हूं जो प्रत्येक 5 सेकंड चलाता है, जब यह समाप्त हो जाता है तो स्मृति को साफ़ करें और जब सीपीयू स्टैंडबाय मोड में है, तो आप ऐप चला सकते हैं। ताकि ऐप एक वाकलॉक से बंधे न हो।

सादर,

शफकत

+0

यह निर्भर कर सकता है कि यह क्या करने जा रहा है। मुझे लगता है कि आप नहीं चाहते कि यूआई हर 5 सेकंड में पॉप अप करे, तो आप इसे पृष्ठभूमि में चलाएं और हर 5 सेकंड में कुछ संसाधित करें? – CrackerJack9

उत्तर

31

पहले तीन के बीच अंतर सिर्फ काम की राशि है कि आप के लिए किया गया है। और Servicefundamental Android application component है।

AsyncTask एक नया धागा पर कुछ काम करने के लिए एक सुविधा के वर्ग के रूप में और धागा जिसमें से यह बुला लिया गया है (आमतौर पर यूआई धागा) समाप्त होने पर परिणाम का उपयोग करें। यह सिर्फ एक रैपर है जो दो रननेबल का उपयोग करता है लेकिन थ्रेड बनाने और धागे के बीच मैसेजिंग को संभालने की सभी जटिलताओं को संभालता है।

Runnable इंटरफ़ेस जावा थ्रेडिंग के मूल में है। रननेबल इंटरफ़ेस किसी भी वर्ग द्वारा कार्यान्वित किया जाना चाहिए जिसका उदाहरण थ्रेड द्वारा निष्पादित किया जाना है।

TimerTask मानक जावा का हिस्सा है और कुछ भाग (रननेबल) कोड के लिए देरी या बार-बार निष्पादन के लिए उपयोग किया जा सकता है। इसका उपयोग discouraged on Android है। आप इसके बजाए एक हैंडलर का उपयोग कर सकते हैं।

एक सेवा का उपयोग आपके एंड्रॉइड एप्लिकेशन के एक स्वतंत्र और यूआई-कम हिस्से के रूप में किया जा सकता है। यह चला सकता है और इसे अपने स्वयं के धागे बना सकता है और उदाहरण के लिए AlarmManager के माध्यम से यूआई या इरादों के साथ शुरू किया जा सकता है।

ऐसा लगता है कि आप चाहते हैं कि एक सेवा है जो अपना स्वयं का धागा बनाता है और कुछ काम करता है। जब काम पूरा हो जाता है, तो कचरा कलेक्टर में आने पर स्मृति को एंड्रॉइड पर मुक्त कर दिया जाएगा, जो कुछ आप नियंत्रित नहीं करते हैं और यह एक अच्छी बात है।

अलार्ममेनगर आपको निर्दिष्ट अंतराल पर इरादों को प्रसारित करने और डिवाइस को जागने के लिए नियंत्रण की अनुमति देता है या नहीं। आपको बस अपनी सेवा में ब्रॉडकास्ट रिसीवर परिभाषित करना होगा और इसे अपने मैनिफेस्ट में घोषित करना होगा।

आपके प्रश्न का अंतिम भाग मैं वास्तव में समझ में नहीं आता, इसलिए कृपया जो कुछ करने की कोशिश कर रहा है उस पर थोड़ा और स्पष्ट करें।

+0

मुझे अभी भी पता नहीं है कि एक रननेबल से सेवा कैसे अलग है ..? ऐसा लगता है कि मैं एक सेवा के बजाय एक रननेबल का उपयोग कर सकते हैं। साथ ही, सेवा में किस विधि को बुलाया जाता है? उदाहरण के लिए, रननेबल में रन() की तरह() –

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