के रूप में दूसरों को तैनात किया है, onActivityResult() onResume से पहले कहा जाता है() जब अपने गतिविधि को पुनरारंभ किया जा रहा है।
डियान हैकबर्न बताते हैं कि ऑन एक्टिविटी रिसेट() को यूआई को प्रभावित करने के लिए यूआई को प्रभावित करने और यूआई को अपडेट करने से पहले उपलब्ध होने की अनुमति देने के लिए कहा जाता है (संभावित रूप से डबल अपडेट से बचने के लिए - एक बार रेज़्यूम में () लौटा परिणाम के बिना, और फिर एक्टिविटी रिसेट() में, लौटा परिणाम जोड़ना)। इस के
https://groups.google.com/forum/?fromgroups=#!topic/android-developers/3epIML7fjGw
एक परिणाम यह है कि किसी भी initializations आप का फैसला किया है हो सकता है onResume() (जैसे, एक बाहरी स्रोत से डेटा का initializations है कि आप ताजा होने की जरूरत है) के बजाय onCreate की तुलना में (भीतर ही प्रदर्शन करने के लिए है), जब unctivityResult() पर एक कॉल को ओएस द्वारा स्मृति से बाहर निकाला गया है, तो पुन: प्रारंभ करने के हिस्से के रूप में होता है (क्योंकि ऑनस्यूम() को एक्टिविटी रिसैट() से पहले नहीं कहा जाता था।
इस स्थिति में, atctivityResult() को पर पर उपयोग किए जाने वाले ऐसे चर के लिए प्रारंभिक कार्य करने के लिए तैयार होना होगा।
बेशक, अगर एक्टिविटी रिसेट() द्वारा प्रारंभिक प्रारंभिकरणों को रेस्यूम() की बजाय क्रिएट() में किया जा सकता है, तब सेक्रेट() को एक्टिविटी रिसेट() और ऑनस्यूम() दोनों से पहले पुनरारंभ करने के लिए कहा जाएगा, यह उन सामानों के लिए जाने का सबसे आसान तरीका होगा जिन्हें आपको हर बार ऐप फिर से शुरू करने की आवश्यकता नहीं होती है। यदि, हालांकि, आप जिस डेटा को प्रारंभ कर रहे हैं वह बाहरी स्रोत से आता है और आपको इसे ताजा होने की आवश्यकता है, तो आप क्रिएट() और ऑनस्यूम() दोनों पर ऐसे डेटा को प्रारंभ करना चाहेंगे, ऑनस्यूम() पर एक फ्लैग सेट की जांच कर रहे हैं() यह देखने के लिए कि डेटा को अभीक्रेट में प्रारंभ किया गया है), और उसके बाद इसे केवल रेज़्यूम() में अपडेट कर रहा है अगर वे नहीं हैं। इस तरह, इसका कुछ विंटेज हमेशा उपलब्ध रहेगा (कम से कम पिछली बार ऐप फिर से शुरू होने के बाद)।
इस से निपटने का एक और तरीका है एक्टिविटी रिसैट() द्वारा आवंटित जानकारी को स्टोर करने के लिए, जो रेस्यूम() द्वारा उठाया जाएगा और वहां संसाधित किया जाएगा (किसी भी आवश्यक प्रारंभिकरण के बाद रेज़्यूम() द्वारा किया गया है) AtctivityResult() के शरीर के भीतर प्रसंस्करण कर रहा है।
यह एक ऐसी सुविधा है जिसे बहुत ही कम दस्तावेज किया गया है, जिसमें कुछ हद तक अप्रत्याशित अनुक्रम के परिणामों के बारे में कोई स्पष्टीकरण या चेतावनी नहीं दी गई है (आधिकारिक दस्तावेज़ों में)। परीक्षण के दौरान समस्या को याद करना भी बहुत आसान है, क्योंकि बहुत से मेमोरी वाले डिवाइस पर, जो कई ऐप्स नहीं चला रहे हैं, गतिविधि एक्टिविटीफॉररसल्ट() (या इसके रूप) को कॉल करने वाली गतिविधि को कभी भी स्मृति से फ़्लश नहीं किया जा सकता है एक्टिविटी रिसैट() के माध्यम से परिणाम लौटने के लिए गतिविधि शुरू की, और इस प्रकार ऑनस्यूम() द्वारा किए गए सभी प्रारंभिक पहले से ही उपलब्ध होंगे, और इस प्रकार समस्या का पता नहीं लगाया जा सकता है।
इस अनुक्रमण के आस-पास के कुछ मुद्दों (ऐप के अनुप्रयोग ऑब्जेक्ट का उपयोग करने के प्रयासों के बारे में चेतावनी सहित, इसके प्रभाव से चर की रक्षा करने के प्रयासों के बारे में चेतावनी सहित), यहां एक हाथ से खींचे गए यूएमएल अनुक्रम आरेख के साथ एक सूचनात्मक अन्वेषण है, यहां:
इस के
http://steveliles.github.com/android_activity_lifecycle_gotcha.html
अभी तक मेरा कोड एक्टिविटी रिसेट पर कॉल कर रहा है * ऑनस्टार्ट *: -/ –
ये चित्र गतिविधि और टुकड़े के पूर्ण जीवन चक्र को समझने के लिए उपयोगी हो सकते हैं: https: // github।com/xxv/android-lifecycle – Sergii