android - preferences getting lost after app has run for awhile -


मेरी मुख्य गतिविधि में मैंने कुछ वरीयताओं को पढ़ा

  सार्वजनिक व्यर्थ क्रिएट (बंडल सहेजे गए इन्स्टेंसस्टेट) { super.onCreate (savedInstanceState); SharedPreferences सेटिंग्स = PreferenceManager.getDefaultSharedPreferences (संदर्भ); FontSize = settings.getFloat ("टेक्ससाइज़", (फ्लोट) 20); UserName = settings.getString ("उपयोगकर्ता नाम", ""); }   

विभिन्न अन्य उप-गतिविधियों में मैं इस तरह के इन वरीयताओं का संदर्भ देता हूं

  body.setTextSize (main.fontSize);   

यह ज्यादातर समय ठीक काम करता है। ऐप कुछ समय के लिए चल रहा है और मैं इसे पुनः लॉन्च करने के बाद कभी-कभी, सभी कॉन्फ़िगरेशन चर रिक्त दिखाई देते हैं। डीबगिंग करते समय यह अनिश्चित और पुन: उत्पन्न करने के लिए कठिन है। जब ऐसा होता है, तब तक मैं सभी पुरानी स्क्रीन के माध्यम से बार-बार वापस हिट कर सकता हूं, जब तक कि यह बाहर नहीं निकलता, तब तक पुन: लॉन्च करें और वरीयताएं वापस आती हैं और काम कर रहा है

मैं बेतरतीब ढंग से चीजों को चारों ओर अलग-अलग जगहों जैसे कि स्टार्ट (), या OnRestart (), जो अभी तक मदद नहीं की है। या साझा की गई प्राथमिकताओं को फिर से पढ़ना शुरू करने के लिए हर गतिविधि को फिर से करना। लेकिन मैं जानना चाहूंगा कि मैंने इस जीवन चक्र के बारे में क्या गलत किया है जो कि इस समस्या का कारण है।

एंड्रॉइड नियमित रूप से आपकी गतिविधि को नष्ट कर देता है और जब जरूरत पड़ती है इसलिए, आपका onCreate () फ़ंक्शन सहेजा गया साझा किए गए संदर्भ / <> कोड पढ़ रहा है, लेकिन वर्ग चर fontSize और userName हैं गुंजाइश में नहीं रहना।

मेरा मानना ​​है कि समस्या यादृच्छिक लगता है और इन चर को स्थिर होना दिखाई देता है मैं यह कहता हूं क्योंकि आपका उदाहरण fontSize को एक स्थिर तरीके से एक्सेस करता है:

  body.setTextSize (main.fontSize);   

जब भी वे परिवर्तित हो जाते हैं या onPause () में आपके मूल्यों को सहेजना चाहिए, जैसा कि आप शायद पहले से ही करते हैं लेकिन, उन्हें केवल onCreate () में पढ़ना पर्याप्त नहीं है क्योंकि एंड्रॉइड हमेशा आपकी गतिविधि को पूरी तरह से नष्ट नहीं कर रहा है इसलिए, हर बार आपकी गतिविधि को फिर से शुरू होने पर onCreate () नहीं कहा जाएगा आपको मूल्यों को फिर से पढ़ना होगा, या जब भी आपको इसकी आवश्यकता होती है, या onResume ();

मैंने लिखा है, 'ऊपर मुहैया', क्योंकि स्थिर वैरिएबल्स को स्वचालित रूप से साफ़ नहीं किया गया है जब तक क्लास पूरी तरह से नष्ट नहीं हो जाता तब तक जावा। इसलिए, कभी-कभी मूल्य अन्य समय से अधिक समय तक रह जाएगा, जिससे व्यवहार को अप्रत्याशित रूप से देखा जा सके।


अंत में, इन मानों को स्थैतिक होने की इजाजत देने का सर्वोत्तम अभ्यास नहीं है। SharePreferences सहित, सक्रियियों के बीच उन्हें साझा करने के कई अन्य तरीके हैं।

Comments

Popular posts from this blog

excel vba - How to delete Solver(SOLVER.XLAM) code -

github - Teamcity & Git - PR merge builds - anyway to get HEAD commit hash? -

ios - Replace text in UITextView run slowly -