7

मेरे पास ब्रॉडकास्ट रिसीवर क्लास है। मेरे पास कुछ स्थिर चर घोषित किए गए हैं जिनके मूल्य को ऑनसीस() विधि के साथ अद्यतन किया गया है। मेरे ज्ञान के अनुसार स्थैतिक चर पर निर्भर करता है कि यह ऑन-रिलीज कॉल पर है। क्या कोई संभावना है जब मैं उन मानों को खो दूंगा (जैसे मेरी कक्षा स्थिर चर को रीसेट कर दिया जाएगा)? ये मूल रूप से कुछ अस्थायी चर हैं जिन्हें मुझे कई ऑनसाइट कॉल के लिए उपलब्ध होना आवश्यक है।ब्रॉडकास्ट रिसीवर लाइफ साइकिल - स्टेटिक वैरिएबल

उत्तर

4

BroadcastReceiver Lifecycle के लिए दस्तावेज़ से ...

एक BroadcastReceiver वस्तु onReceive करने के लिए कॉल (संदर्भ, आशय) की अवधि के लिए ही मान्य है। एक बार आपका कोड इस फ़ंक्शन से लौटने के बाद, सिस्टम ऑब्जेक्ट को समाप्त होने पर विचार करता है और अब सक्रिय नहीं होता है।

यह इस तथ्य में व्यावहारिक चर का उपयोग करने के लिए व्यावहारिक चर का उपयोग नहीं करेगा कि चीजें सिस्टम द्वारा जल्दी साफ हो जाएंगी। मैं फोन करके SharedPreferences उपयोग करने का प्रयास करेंगे ...

context.getSharedPreferences("MyReceiver", MODE_PRIVATE)

... रिसीवर के onReceive(...) विधि में (कुछ नाम जो आपके ऐप्लिकेशन के लिए समझ में आता है के साथ "MyReceiver" बदलें)।

+1

लेकिन स्थैतिक चर वर्ग स्तर परिवर्तनीय हैं और वस्तु को नष्ट होने पर साफ़ नहीं किया जाना चाहिए। अगर मैं गलत हूं कृपया मुझे सही। मुझे getSharedPreferences() के बारे में पता है, लेकिन केवल स्थैतिक चर का उपयोग करना चाहता था क्योंकि कुछ बार बाद में उन कार्यों को साफ़ करने की आवश्यकता होती है जब मेरा काम उनके साथ किया जाता है और मैं नहीं चाहता कि वे अभी भी साझा किए गए संदर्भों में उपस्थित हों। आखिरकार यदि यह हो सकता है चर के माध्यम से हासिल किया गया है तो मैं SharePreferences का उपयोग नहीं करना चाहता। यदि यह तब नहीं हो सकता है तो निश्चित रूप से मैं साझा संदर्भों के लिए जाऊंगा। – Sush

+0

@ सुश: "लेकिन स्थैतिक चर वर्ग स्तर परिवर्तनीय हैं और वस्तु को नष्ट होने पर साफ़ नहीं किया जाना चाहिए।" - तो उस वर्ग का आखिरी उदाहरण नष्ट होने पर 'वेरिएबल वेरिएबल्स' कहां मौजूद हैं? वे साइबर स्पेस में बस उस कक्षा के एक और उदाहरण के लिए इंतजार नहीं कर रहे हैं। जैसा कि दस्तावेज़ों के उद्धरण में बताया गया है, जब 'ऑन रिसीव (...)' बाहर निकलता है "सिस्टम ऑब्जेक्ट को समाप्त होने पर विचार करता है"। असल में आप गारंटी नहीं दे सकते कि 'ब्रॉडकास्ट रिसेवर' ऑब्जेक्ट जीसीडी कब होगा। 'साझा किए गए संदर्भ' के लिए, आप अब आवश्यकता होने पर उन्हें 'साफ़' कर सकते हैं। – Squonk

+3

@MisterSquonk: मैं सहमत हूं कि साझाकरण कार्य कर सकते हैं। लेकिन मैं दृढ़ता से असहमत हूं कि कक्षा के आखिरी उदाहरण नष्ट हो जाने के बाद स्थैतिक चर नष्ट हो जाएंगे। क्लास को स्मृति में लोड होने पर स्टेटिक वैरिएबल प्रारंभ किए जाते हैं, यानी। जब एप्लिकेशन शुरू होता है और स्मृति में तब तक रहता है जब तक कि कक्षा स्मृति में न हो। यह जीवित वस्तुओं पर निर्भर नहीं है। – Sush

0

या आप निश्चित रूप से अपनी गतिविधि कक्षा के भीतर स्थिर वार्स घोषित कर सकते हैं।

+0

हाँ मैं कर सकता हूँ। लेकिन क्या ** ब्रॉडकास्ट रिसीवर ** के अंदर स्थिर चर घोषित करने में कोई समस्या है? – Sush

+0

किसी गतिविधि, ब्रॉडकास्ट रिसीवर, या कक्षा में स्थैतिक चर घोषित करने के लिए कोई फर्क नहीं पड़ता।एक स्थैतिक चर वही व्यवहार करता है। – jclova

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