16

.. तो एक अतुल्यकालिक धागा एक धागा है कि मुख्य थ्रेड के लिए अलग से चलाता है और मुख्य थ्रेड साथ हस्तक्षेप नहीं करता हैक्या कोई कृपया बता सकता है कि कैसे प्रारंभ करें सक्रियता (इरादा) और startActivityForResult (इरादा) असीमित हैं?

करता है एक नई Activity मुख्य थ्रेड पर कब्जा नहीं होने के बाद यह startActivity(intent) के माध्यम से शुरू कर दिया गया है?

जो मैंने इस पर पढ़ा है, उनमें से अधिकांश कहते हैं कि ये दोनों अतुल्यकालिक हैं, हालांकि कुछ निष्पक्ष कुछ विवादित उत्तर हैं और जो लोग कहते हैं वे वास्तव में ठोस तर्क नहीं देते हैं।

तो यदि कोई व्यक्ति जो अपने सिर में यह स्पष्ट करता है और समझा सकता है कि वे सिंक्रोनस/असीमित क्यों हैं, तो मैं बहुत आभारी व्यक्ति बनूंगा!

चीयर्स

संपादित करें: के बारे में आने के लिए तो जवाब मैं इन दो अच्छा लोक और ऑनलाइन कुछ सामान से ली गई है ..

तुल्यकालिक/अतुल्यकालिक के मिश्रण में क्रियाएँ लाना घोड़े का भार पैदा कर सकता है । लेकिन यह अभी भी सिद्धांतों का जिक्र कर रहा है ..

Synchronous कॉल स्टैक जारी रखने से पहले विधियों/आदेशों को पूरा किया जाना चाहिए।

Asynchronous विधियों/आदेश (आमतौर पर थ्रेड/AsyncTask में किया जाता है) निष्पादन के मुख्य धागे को जारी रखने के समानांतर में जारी रहता है। (यह अपने समय में वापस आ सकता है)

प्रारंभ गतिविधि (इरादा) और स्टार्ट एक्टिविटीफॉर रिसेट (इरादा) विधियां असीमित हैं क्योंकि वे अवरुद्ध नहीं हैं और निष्पादन के धागे को भी इसी तरह के कार्य को जारी रखने की अनुमति देते हैं।

+5

बिल्कुल नहीं। प्रारंभिकता कुछ समय बाद यूआई थ्रेड पर चलने वाली एक नई गतिविधि को शेड्यूल करती है। यह अतुल्यकालिक है कि यह तुरंत शुरू नहीं होता है और विधि तुरंत लौटती है। – njzk2

+0

आह, धन्यवाद! मदद की सराहना करो! – mgibson

+0

यदि आप कोई उत्तर बनाना चाहते हैं, तो मैं इसे स्वीकार करूंगा – mgibson

उत्तर

20

startActivity(intent) और startActivityForResult(intent) इस अर्थ में अतुल्यकालिक हैं कि ये विधियां तुरंत गतिविधि शुरू किए बिना लौटती हैं। असल में, वे वर्तमान गतिविधि की जीवन चक्र घटनाओं के समाप्त होने के बाद ही शुरू करने के लिए एक गतिविधि निर्धारित करते हैं।

लेआउटवे है, अगर आपके पास कुछ है, तो इसे पूरा करने में कुछ समय लगता है, onPause() पहली गतिविधि की विधि में, नया Activity प्रारंभ करने में धीमा हो जाएगा।

+2

सही और कॉम्पैक्ट उत्तर! –

+0

यह अभी भी हो सकता है कि प्रारंभिकता (इरादा) कॉल पर रोकें()। मैं यहां अनुमान लगा रहा हूं, लेकिन आपके उत्तर से असीमितता का पालन नहीं करता है। असल में मैं यह जांचने जा रहा हूं कि कॉल सिंक्रोनस है या नहीं। –

2

जब आप startActivityForResult तब भी आप एक एसिंक्रोनस कॉल करते हैं। आपकी कॉलर गतिविधि निलंबित हो जाती है और नई प्रक्रिया किसी अन्य प्रक्रिया में शुरू होती है (यदि यह किसी भिन्न उपयोगकर्ता के अंतर्गत चलती है)।

लेकिन जब कॉल की गई गतिविधि setting a result को समाप्त करती है, तो आपकी गतिविधि फिर से शुरू हो जाती है और आपको onActivityResult परिणामस्वरूप कॉलबैक कहा जाता है।

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