2013-09-06 7 views
5

onReceive()BroadcastReceiver धागा सुरक्षित है या मुझे अपने आप सिंक्रनाइज़ेशन को लागू करने की आवश्यकता है?ब्रॉडकास्ट रिसीवर ऑन रिसीव() थ्रेड सुरक्षित?

यदि मेरे पास कोई वर्ग स्तर चर है जिसका उपयोग onReceive() विधि के अंदर किया जा रहा है, और onReceive() विधि को कई बार बहुत जल्दी कहा जाता है, तो क्या इससे कोई समस्या होगी?

public class MyBroadCastReceiver extends BroadcastReceiver { 

    boolean isFirstTrigger = true; 

    @Override 
    public void onReceive(Context context, Intent arg1) { 
     if(isFirstTrigger) 
     { 
     //Do something time consuming 
     isFirstTrigger = false; 
     } 
     } 

उत्तर

7

onReceive() BroadcastReceiver धागे की विधि सुरक्षित है या मैं अपने दम पर तुल्यकालन को लागू करने की आवश्यकता है?

इसे केवल मुख्य एप्लिकेशन थ्रेड पर ही बुलाया जाएगा। इसलिए, यह मुख्य अनुप्रयोग धागे पर चल रहे किसी और चीज के संबंध में थ्रेड-सुरक्षित है।

यदि मेरे पास कोई कक्षा स्तर चर है जिसका उपयोग ऑनसेसिव() विधि के अंदर किया जा रहा है, और ऑनसेसिव() विधि को कई बार बहुत जल्दी कहा जाता है, तो क्या इससे कोई समस्या होगी?

यदि BroadcastReceiver मैनिफेस्ट में पंजीकृत है, तो प्रत्येक प्रसारण के लिए एक नया उदाहरण बनाया गया है। यही कारण है कि आप आमतौर पर BroadcastReceiver पर डेटा सदस्यों को नहीं देखते हैं।

+0

ब्रॉडकास्ट रिसीवर प्रकट में पंजीकृत है और मुझे उस समस्या के आसपास काम करना है जिसमें नेटवर्क परिवर्तन प्रसारण कुछ उपकरणों पर दो बार या तीन बार निकाल दिया जाता है। मैं कक्षा स्तर चर का उपयोग करने के बारे में सोच रहा था। अब मैं साझा किए गए संदर्भों का उपयोग करने और "isFirstTrigger" को संग्रहीत करने के बारे में सोच रहा हूं, फिर प्रसंस्करण पूर्ण होने के बाद इसे गलत सेट कर रहा हूं। लेकिन यह सुनिश्चित नहीं है कि यह काम करेगा या नहीं (यदि नए कॉल बनने से पहले नए उदाहरण बनाए जाते हैं और कॉल किया जाता है)। कोई सुझाव? – Manish

+0

@ मिशनल: आपकी प्रक्रिया * शायद * प्रसारण के कुछ सेकंड बाद ही रहेगी, और इसलिए आप एक स्थिर डेटा सदस्य से दूर हो सकते हैं। अन्यथा, आपको इसे 'साझाकरण' या अन्य जगहों पर जारी रखना होगा। – CommonsWare

+0

धन्यवाद @ कॉमन्सवेयर, साझा किए गए संदर्भों का उपयोग करने में मेरी चिंता यह है: यदि ब्रॉडकास्ट रिसीवर के कई उदाहरण बनाए जाते हैं, तो क्या वे सभी एक ही समय में साझा प्रेफरेंस तक नहीं पहुंचेंगे? ऐसा हो सकता है कि ऑनसीसीव() का दूसरा और तीसरा आविष्कार पहले आवेषण अपडेट साझाकरण से पहले होता है। – Manish

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