प्रश्न:
मैं ब्लूटूथ कनेक्शन को प्रबंधित (कनेक्ट, पढ़ना, लिखना, डिस्कनेक्ट) कैसे कर सकता हूं जो कॉन्फ़िगरेशन परिवर्तनों के माध्यम से बनी रहती है?कॉन्फ़िगरेशन परिवर्तनों के माध्यम से एंड्रॉइड पर ब्लूटूथ कनेक्शन का प्रबंधन कैसे करें?
ActionBarSherlock का उपयोग कर डिवाइस संस्करण 2.2 "फियोयो" के साथ संगत समाधानों को प्राथमिकता दें।
समस्याएं ...
न तो
BluetoothDevice
है और न हीBluetoothSocket
onSaveState
में बनाए रखा जा सकता है।keep my app responsive के लिए, 12 सेकंड अवरुद्ध कॉल
BluetoothSocket.connect()
को अलग थ्रेड पर बनाया जाना चाहिए।Runnable
शुरू करना लंबे कार्यों को थ्रेड करने का अनुशंसित तरीका है, लेकिन यह कॉन्फ़िगरेशन परिवर्तन पर पुनर्प्राप्त करने का प्रयास करने वाला एक दुःस्वप्न है। आधिकारिक दस्तावेज़ तीन अलग-अलग समाधानों को इंगित करते हैं।getLastNonConfigurationInstance()
का उपयोग करें, जो बहिष्कृत (गंभीरता से ?!) है।android:configChanges="keyboardHidden|orientation"
BluetoothChat Sample की तरह सेट करें। हालांकि, यह सभी प्रकार के कॉन्फ़िगरेशन परिवर्तनों के लिए जिम्मेदार नहीं है।& Shelves Example जैसे कार्यों को पुनरारंभ करें। इस मामले में, यह संभावित रूप से एक और 12 सेकंड बर्बाद कर सकता है।
अद्यतन 1
इसके अलावा अनुसंधान मुझे asyncTaskLoader के लिए नेतृत्व किया है, लेकिन ऐसा लगता है कि यह केवल पूरा होने पर यूआई अद्यतन कर सकते हैं, और अद्यतन प्रदान नहीं कर सकते लगता है।
ब्लूटूथ एचडीपी नमूना एक सेवा का उपयोग करता है। सेवाएं अंतर-प्रक्रिया संचार और गतिविधि जीवन चक्र से परे बने रहने की आवश्यकता पर केंद्रित लगती हैं। मुझे इनमें से किसी भी सुविधा की आवश्यकता नहीं है।
अद्यतन 2
As pointed out by Reuben, Fragment.setRetainInstance(bool)
पदावनत getLastNonConfigurationInstance()
प्रतिस्थापित किया है। इस बिंदु पर, ऐसा लगता है कि setRetainInstance(true)
का उपयोग कर लगातार गैर-यूआई खंड बनाने का सबसे अच्छा विकल्प है।
क्या यह इस गतिविधि के लिए एक टुकड़ा बनाने लायक है, इसलिए मैं 'setRetainInstance' का उपयोग कर सकता हूं? क्या "बनाए रखा" खंड एक अभिविन्यास परिवर्तन पर घूमने और आकार बदलने में सक्षम हो जाएगा? इसके अलावा, [इस तो सवाल] (http://stackoverflow.com/questions/4585627) मुझे सिखाया है कि आवेदन की एक उपवर्ग एक सुरक्षित तरीका वैश्विक स्टोर करने के लिए नहीं है। वास्तव में, यह उन बगों का कारण बन सकता है जो पुन: बनाना लगभग असंभव हैं। – firyice
पुन। टुकड़ा, हाँ। बाद में बजाए चीजों को करने के टुकड़े के तरीके को गले लगाने के लायक है। आवेदन subclassing, किसी के उलझन में। हां कार्य स्थिति ओएस द्वारा जमे हुए हो सकती है जबकि प्रक्रिया मारे जाती है, लेकिन क्या? Application.onCreate() तब भी चलता है जब प्रक्रिया/कार्य पुनरारंभ/फिर से शुरू होता है। –
तो क्या? यदि प्रक्रिया पुनरारंभ होती है और Application.onCreate() कहा जाता है, तो आपने उन वैश्विक चरों में डेटा खो दिया है। एकमात्र तरीका जो ठीक हो सकता है स्थिरांक के लिए है। – firyice