2010-04-20 9 views
6

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

यहाँ मैं क्या करना चाहते हैं: उपयोगकर्ता वापस बटन, डेटाबेस के लिए सभी डेटा को बचाने और उपयोगकर्ता को सूचित करने का प्रयास प्रेस

  1. हैं।
  2. यदि गतिविधि बाधित होती है (यानी एक फोन कॉल द्वारा), तो सभी डेटा को अस्थायी स्थान में सहेजें ताकि जब गतिविधि स्टैक के शीर्ष पर हो, तो कुछ भी नहीं बदला होता है (लेकिन डेटा अभी भी नहीं है अभी तक डेटाबेस में सहेजा गया है)।
  3. यदि पृष्ठभूमि में अधिक संसाधनों के लिए गतिविधि मारे जाती है, तो ऊपर बिंदु 2 के समान ही करें (यानी जब गतिविधि फिर से शुरू होती है, ऐसा लगता है कि कुछ भी नहीं बदला है)।
  4. यदि पूरा एप्लिकेशन दोबारा शुरू हो गया है (आइकन पर फिर से क्लिक करके) और उपरोक्त बिंदु 2 या 3 से संग्रहीत अस्थायी डेटा है, तो "उपयोगकर्ता बनाएं" गतिविधि पर नेविगेट करें और डेटा प्रदर्शित करें जैसे नोटिंग बदल गई है।

यहाँ कैसे मैं वर्तमान में यह करने के लिए कोशिश कर रहा हूँ है: ऊपर बिंदु 1 कवर करने के लिए

  • उपयोग onDestroy() और isFinishing() कार्यों जब गतिविधि को मार डाला जा रहा है लगता है, (तब के लिए कोशिश करते हैं और बचाने के लिए सभी डेटा)।
  • सहेजें एक बंडल में onSaveInstanceState साथ सभी डेटा
  • बंडल onSaveInstanceState के साथ बनाई गई गतिविधि जीवित रहने करता है अधिक संसाधनों के लिए हत्या किए जाने, तो (ऊपर बिंदु 2 कवर करने के लिए) जब उसके (पुनर्निर्मित बिंदु के रूप में पहले वाली स्थिति प्राप्त किए जा सकें ऊपर 3)?
  • कोई विचार बिंदु लागू करने के लिए कैसे 4.

किसी भी मदद की सराहना की बड़े पैमाने पर किया जाएगा।

चीयर्स!

+0

के बजाय Android reference द्वारा सुझाए गए किसी भी तंत्र का उपयोग कर सकते हैं क्या आप निश्चित रूप से 3 और 4 हैं? यह सिस्टम आपके कार्य स्टैक को रीसेट करने और सिस्टम को लंबे समय तक छोड़ने पर स्पष्ट जानकारी के लिए मानक एंड्रॉइड व्यवहार है, चाहे गतिविधि मारे जाए या नहीं, इसलिए उपयोगकर्ता इसकी अपेक्षा करते हैं। शायद इस पर सिस्टम से लड़ने की तुलना में एक बेहतर योजना एक स्क्रीन पर गैर-सहेजने योग्य जानकारी की मात्रा को कम करने या प्रवाह को फिर से डिजाइन करने के लिए है ताकि सब कुछ बचाया जा सके() - हो सकता है कि उपयोगकर्ता को उनके साथ उपयोगकर्ता बनाने के लिए एक स्क्रीन हो नाम, जो केवल "बनाएं" बटन पर क्लिक करने पर बचाता है, फिर विवरण दर्ज करने के लिए दूसरी स्क्रीन, जिसमें से सभी को रोकें()। –

+0

बिंदु 3 और 4 के साथ मुझे लगता है कि जब संदेश ड्राफ्ट के रूप में सहेजे जाते हैं तो मैं संदेश एप्लिकेशन को दोहराने की कोशिश कर रहा हूं। यद्यपि उपयोगकर्ता नाम और अन्य आवश्यक विवरणों के साथ किसी गतिविधि में जानकारी काटने के बावजूद, किसी अन्य पृष्ठ में अन्य विकल्पों के साथ फायदेमंद लगता है। धन्यवाद। –

उत्तर

4

मैं समय पर छोटा हूं इसलिए पूर्ण विस्तृत उत्तर नहीं दे सकता, लेकिन संक्षेप में, मेरे सुझाव यहां दिए गए हैं।

    इसके बजाय onDestroy() का उपयोग करने का
  • , onPause() का उपयोग करें। यह कहने की गारंटी है; लाइफसाइक्सेस पर आधिकारिक दस्तावेज़ीकरण के अनुसार, केवल ऑन पॉज़() की गारंटी है। ऑनस्टॉप और ऑनस्ट्रोय नहीं हैं।
  • ऑनसेवेंसस्टेट और ऑन पॉज़ समान हैं। दोनों को कॉल किया जाता है जब ऐप अग्रभूमि छोड़ देता है (यानी यह मारने के लिए संभावित खतरे के क्षेत्र में प्रवेश करता है), लेकिन ओएसआईएस के साथ अंतर यह अस्थायी बंडल है जो यह प्रदान करता है। ऑनपॉज कोई डेटा स्टोरेज तंत्र प्रदान नहीं करता है, लेकिन यदि आप पहले से ही एक डेटाबेस का उपयोग कर रहे हैं। दस्तावेज़ीकरण के मुताबिक, गारंटीकृत आदेश नहीं है जिसके लिए पहले व्यक्ति को बुलाया जाता है।
  • प्वाइंट 3) यह वही है जो ओएसआईएस
  • प्वाइंट 4) आप अपने डेटाबेस में 'अस्थायी पंक्ति' बना सकते हैं, यानी अस्थायी डेटा को पंक्ति 1 में सहेज सकते हैं, लेकिन जब भी कोई बचत ठीक से बनाई जाती है, तो पंक्ति 1 हो जाती है blanked। फिर अपने ऑनक्रेट() में, जांचें कि पंक्ति 1 में वास्तविक डेटा है या खाली है।(यदि आपके कॉलम खाली नहीं हो सकते हैं, तो पूर्व निर्धारित प्लेसहोल्डर मानों का उपयोग करें जो सामान्य उपयोग के हिस्से के रूप में कभी नहीं दिखाई देंगे।)
+2

'ऑनसेवस्टेंसस्टेट()' के लिए प्रलेखन के अनुसार, आपके दूसरे बुलेट पर मामूली सुधार: "इस पर कोई गारंटी नहीं है कि यह पहले से या बाद में '()'। – CommonsWare

+0

संपादित, जानकारी के लिए धन्यवाद। –

+2

यह भी ध्यान दें कि यदि सेवा समाप्त हो रही है तो (सेवइंस्टेंसस्टेट() को कॉल नहीं किया जाएगा (क्योंकि उपयोगकर्ता उस उदाहरण पर वापस नहीं आ जाएगा), और आप ऑनपॉज़() में फिनिशिंग() को देख सकते हैं। – hackbod

1

मेरा सुझाव है कि आप अस्थायी स्थिति को बचाने के लिए एक समान तंत्र बनाते हैं। आप बंडल

+0

किसी कारण से मैंने इस तरह से सोचा नहीं था, बंडल इत्यादि का उपयोग करने की कोशिश करके अंधा कर दिया गया था। इस तरह मैं पूर्ण नियंत्रण में रहूंगा, इसलिए अगर मैं फिट दिखाई देता हूं तो इसे बदलने में काफी आसान होना चाहिए। –

संबंधित मुद्दे