2013-02-18 35 views
7

में संग्रहीत डेटा मुझे , onStop और onSaveInstanceState में क्या जाना चाहिए इसके बारे में भ्रम है। उदाहरण के लिए, एंड्रॉयड डॉक्स का कहना है कि के लिए -एंड्रॉइड - ऑन पॉज़, ऑनस्टॉप या ऑनसेवेंसस्टेट

बिना सहेजे गए परिवर्तन प्रतिबद्ध है लेकिन केवल तभी उन स्थायी रूप से बचाया जा इस तरह के बदलाव के लिए जब वे (जैसे अधूरा ईमेल के रूप में) छोड़ उम्मीद है।

onStop के लिए -

आप() इस तरह के एक डेटाबेस के लिए जानकारी लेखन के रूप में बड़े, अधिक सीपीयू गहन बन्द करते संचालन, प्रदर्शन करने के लिए onStop उपयोग करना चाहिए।

onSaveInstanceState

अपनी गतिविधि के लिए अधिक राज्य जानकारी है कि आप इस तरह के सदस्य चर कि गतिविधि में उपयोगकर्ता की प्रगति को ट्रैक के रूप में, में पुनर्स्थापित करना चाहते हो सकता है।

क्या यह सच नहीं है कि ये तीन चीजें मूल रूप से किसी रूप, या ईमेल जैसी जानकारी संग्रहीत करने के लिए इंगित करती हैं? फिर किस विधि में इसे सहेजा जाना चाहिए?

उत्तर

6

जो कुछ भी आप लगातार रखना चाहते हैं उसे onPause() में संग्रहीत किया जाना चाहिए क्योंकि कुछ एंड्रॉइड संस्करण onPause() लौटने के बाद आपके ऐप को मारने योग्य मानते हैं।

कुछ हद तक अस्पष्ट भेदभाव किया जा रहा है क्योंकि onPause() अपेक्षाकृत अक्सर होता है, और कई परिस्थितियों में भी जहां आप शायद उसी गतिविधि के onResume() के लिए राज्य को नहीं बचाएंगे। इसलिए, onPause() में महंगी परिचालन करने से पहले हर कोई आपको दो बार सोचना चाहता है।

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

+0

'ऑनस्टॉप()' को हनीकॉम (3.0) के बाद से कॉल करने की गारंटी है, जो जनवरी 2016 तक एंड्रॉइड डिवाइसों का 96.8% है। इसलिए मैं डेटा बचाने के लिए 'ऑनस्टॉप()' ओवर ऑन पॉज़() 'का उपयोग करना पसंद करता हूं अभी व। –

+0

@ विकी सिजवानी एक सॉफ्टवेयर इंजीनियरिंग स्टैंडपॉइंट से, _preferring_ 'onStop()' over 'onPause() 'स्वीकार्य नहीं है, जब तक कि आप अपने ऐप के मेटाडेटा (जिसे आप उल्लेख नहीं करते) में एंड्रॉइड 3.0 स्पष्ट रूप से _require_ करते हैं। –

+0

ठीक है, मैं एंड्रॉइड 3.0 के लिए अपने ऐप्स बना देता हूं और बाद में, इसका उल्लेख करना चाहिए था।अन्य (बहस योग्य) कारण मैं 'ऑनस्टॉप() 'पसंद करता हूं क्योंकि इस पंक्ति के कारण [' ऑन पॉज़()' डॉक्स] में है (http://developer.android.com/reference/android/app/Activity.html#onPause % 28% 2 9): "जब ए गतिविधि ए के सामने गतिविधि बी लॉन्च किया जाता है, ... बी को ए 'पर रोक()' रिटर्न तक नहीं बनाया जाएगा, इसलिए सुनिश्चित करें कि यहां कुछ भी लंबा नहीं है। " बेशक, जीवनभर के दस्तावेज़ पूरी तरह से भ्रमित हैं, इसलिए यह निर्णायक नहीं है। –

2

2016 में या उसके बाद यहां आने वाले किसी भी व्यक्ति के लिए, ध्यान दें कि @Class Stacker का उत्तर इस बिंदु पर काफी पुराना है। विशेष रूप से, onStop() Android 3.0 (Honeycomb) है, जो

जनवरी 2016 के रूप में 96.8% of Android devices के लिए खातों जीवन चक्र दस्तावेज़ यहां देखें के बाद से बुलाया जाना निश्चित है: http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle (के लिए Ctrl + F "नहीं killable राज्य में")

अद्यतन: टिप्पणियों में सही तरीके से इंगित किया गया है, इसका मतलब है कि आपका ऐप विशेष रूप से एंड्रॉइड 3.0 और उसके बाद तक सीमित होना चाहिए।

+0

बस यह स्पष्ट करने के लिए (उपरोक्त भी कहा गया है), प्रतिशत स्वयं पर्याप्त बिंदु नहीं है। एक ऐप जो 'ऑन पॉज़()' में निरंतरता को संबोधित नहीं करता है, उसे एंड्रॉइड 3 और उसके बाद तक सीमित रूप से सीमित होना चाहिए। –