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;
}
}
ब्रॉडकास्ट रिसीवर प्रकट में पंजीकृत है और मुझे उस समस्या के आसपास काम करना है जिसमें नेटवर्क परिवर्तन प्रसारण कुछ उपकरणों पर दो बार या तीन बार निकाल दिया जाता है। मैं कक्षा स्तर चर का उपयोग करने के बारे में सोच रहा था। अब मैं साझा किए गए संदर्भों का उपयोग करने और "isFirstTrigger" को संग्रहीत करने के बारे में सोच रहा हूं, फिर प्रसंस्करण पूर्ण होने के बाद इसे गलत सेट कर रहा हूं। लेकिन यह सुनिश्चित नहीं है कि यह काम करेगा या नहीं (यदि नए कॉल बनने से पहले नए उदाहरण बनाए जाते हैं और कॉल किया जाता है)। कोई सुझाव? – Manish
@ मिशनल: आपकी प्रक्रिया * शायद * प्रसारण के कुछ सेकंड बाद ही रहेगी, और इसलिए आप एक स्थिर डेटा सदस्य से दूर हो सकते हैं। अन्यथा, आपको इसे 'साझाकरण' या अन्य जगहों पर जारी रखना होगा। – CommonsWare
धन्यवाद @ कॉमन्सवेयर, साझा किए गए संदर्भों का उपयोग करने में मेरी चिंता यह है: यदि ब्रॉडकास्ट रिसीवर के कई उदाहरण बनाए जाते हैं, तो क्या वे सभी एक ही समय में साझा प्रेफरेंस तक नहीं पहुंचेंगे? ऐसा हो सकता है कि ऑनसीसीव() का दूसरा और तीसरा आविष्कार पहले आवेषण अपडेट साझाकरण से पहले होता है। – Manish