java - स्क्रीन पर घुमाए जाने/गतिविधि को नष्ट करने के बाद एंड्रॉइड में डेटा दृश्य/लेआउट को बनाए रखना




android android-activity (2)

मैं Activity बारे में थोड़ा उलझन में हूं और जब उपयोगकर्ता का डिवाइस घुमाया जाता है तो उसे नष्ट कर दिया जाता है।

मैं चारों ओर पढ़ रहा हूं, और मैं ऐसा करने के लिए तर्क समझता हूँ (यह मूल रूप से डेवलपर को सुनिश्चित करने के लिए 'सेना' है कि वे रोटेशन / भाषा / अन्य परिवर्तनों पर कुछ भी 'याद नहीं' हैं)

अगर मुझे ऐसा प्रतीत होता है तो मुझे सबसे अच्छा अभ्यास करने में खुशी होती है, हालांकि यह सवाल पूछता है:

मैं खेल / ऐप की स्थिति को कैसे याद रखता हूं, ताकि जब स्क्रीन घुमाई जाए तो मुझे उस चीज़ से कुछ हासिल करना चाहिए जो उपयोगकर्ता को देख रहा था?

मैं जो देख सकता हूं, बिल्कुल सब कुछ नष्ट हो जाता है, बेस क्लास कन्स्ट्रक्टर चलाता है और Activity में सभी चर 'नल' हैं

मुझे 'सहेजे गए इन्स्टेंसस्टेट' ( Bundle श्रेणी) पर संदेह है, जहां मैं उस डेटा को इकट्ठा करूंगा, लेकिन इसके चारों ओर पढ़ना केवल तब होता है, जब ऐप संसाधनों की कमी से बंद रहता है (और कुछ अन्य बेहद फ्रिंज केस)

क्या मैं सहेजे हुए इन्स्टेंस स्टेट के उद्देश्य को गलत तरीके से समझता हूं या गलतफहमी? क्या यह सबसे अच्छा अभ्यास छोड़ने के लिए बुद्धिमान है ( Activity को नष्ट किया जा सकता है) यदि मैं रोटेशन पर कुछ भी याद नहीं करने के लिए पर्याप्त सावधानी बरतता हूं? किसी भी सलाह के लिए अग्रिम धन्यवाद।

मुझे यह ध्यान रखना चाहिए कि गेम प्रोग्रामिंग पर लागू होता है (मैं लेआउट XML का उपयोग नहीं कर रहा हूँ)


क्या आपको पुन: निर्मित होने की आपकी गतिविधि की आवश्यकता है? क्या आप रोटेशन पर काम करना चाहते हैं? savedInstanceState है, जहां आप डेटा को गतिविधि के मनोरंजन के लिए पारित करेंगे, लेकिन जब से आप एक्सएमएल लेआउट का उपयोग नहीं कर रहे हैं, तो आप सिर्फ एंड्रॉइड जोड़कर विचार कर सकते हैं: configChanges = "मैनिफेस्ट में आपकी गतिविधि के लिए" अभिविन्यास "। यह आपको रोटेशन परिवर्तन के दौरान क्या होता है पर मैन्युअल नियंत्रण देगा।

मेरी मूल टिप्पणी के लिए अतिरिक्त, मैं कुंजीपटल के लिए कॉन्फ़िगरेशन बदलाव भी दिखाने पर ओवरराइड करेगा:

android:configChanges="orientation|keyboardHidden"

यदि कोई ऐसा काम है जिसे आप रोटेशन परिवर्तन पर करना चाहते हैं तो आप onConfigChange बदलें पर ओवरराइड कर सकते हैं और वहां कुछ भी करें जो आपको चाहिए।

यह कहना मुश्किल है कि एक समय था जब आपको हमेशा कॉन्फ़िगर बदलावों को ओवरराइड करना चाहिए, लेकिन मैं अक्सर ऐसा करता हूं जब मेरे संसाधन फ़ोल्डर्स पर कोई निर्भरता नहीं होती है जो आकार या ओरिएंटेशन विशिष्ट होती हैं और मैं बहुत काम कर रहा हूं जो बहुत ज्यादा लेता है विश्राम करने का समय


Configiti बदलाव सक्रियता के दौरान डेटा को स्टोर करने के लिए अन्य सर्वोत्तम अभ्यास हैं।

1. डेवलपर दस्तावेज़ हैंडलिंग रनटाइम परिवर्तन
2. एलेक्स लॉकवुड: फ्रैगमेंट्स के साथ विन्यास परिवर्तनों को संभालने , यह आपके सभी सवालों के जवाब देगा जो कॉन्फ़िग में परिवर्तन और डेटा को संसाधित करना है।

Impt: डेटा को संग्रहीत करने के लिए टुकड़ा फ़ाइल। आपको डेटा को संग्रहीत करने और अपनी गतिविधि कॉन्फ़िग में बदलाव के दौरान पुनः प्राप्त करने के लिए setRetainInstace(true) सेट करना होगा।

@Override 
   public void onCreate(Bundle savedInstanceState) {  
          super.onCreate(savedInstanceState);        
          // retain this fragment
          setRetainInstance(true);    
    }




screen-rotation