2012-08-30 28 views
23

दस्तावेज़ीकरण के अनुसार एंड्रॉइड ओएस बैकस्टैक के पीछे गतिविधि को मार सकता है।सार्वजनिक स्थैतिक चर और एंड्रॉइड गतिविधि जीवन चक्र प्रबंधन

तो, उदाहरण के लिए कहें कि मेरे पास एक ऐप है और मुख्य गतिविधि खोलें (चलिए इसे गतिविधि ए कहते हैं)। इस सार्वजनिक गतिविधि वर्ग में मैं एक सार्वजनिक स्थैतिक चर घोषित करता हूं और आरंभ करता हूं (चलिए इसे "foo" कहते हैं)। गतिविधि ए की ऑनक्रेट() विधि में मैं फिर "foo" का मान बदलता हूं। गतिविधि ए से उपयोगकर्ता गतिविधि ए नामक मेरे ऐप के भीतर एक और गतिविधि शुरू करता है। वेरिएबल "foo" गतिविधि बी में प्रयोग किया जाता है। गतिविधि बी तब उपयोगकर्ता को अन्य ऐप्स में कुछ अन्य गतिविधियों के लिए नेविगेट करने के बाद रोक दिया जाता है। आखिरकार, स्मृति की कमी होने के बाद, गतिविधि ए तो गतिविधि बी को मार दिया जा सकता है। उपयोगकर्ता वापस मेरे ऐप पर जाता करने के बाद वह पुन: प्रारंभ (वास्तव में "पुन") गतिविधि बी

क्या होता है:

  1. विल चर "foo" इस बिंदु पर मूल्य है कि यह जब करने के लिए स्थापित किया गया था है गतिविधि ए की ऑनक्रेट() विधि चल रही है?

  2. परिवर्तनीय "foo" मौजूद नहीं है?

  3. परिवर्तनीय "foo" मौजूद है और अब प्रारंभिक मान है और गतिविधि ए की ऑनक्रेट() विधि में मान सेट नहीं है?

उत्तर

23

यदि प्रक्रिया मारे जाती है तो सभी स्थैतिक चर को उनके डिफ़ॉल्ट मानों में पुन: प्रारंभ किया जाएगा।

तो आप जो भी मान गतिविधि एक में निर्धारित किया है जारी रहती है नहीं होगा

+0

आपके उत्तर – jsstp24n5

+0

+1 सही उत्तर के लिए धन्यवाद :) – Lucifer

+8

क्या होता है यदि प्रक्रिया नहीं मारा गया था, केवल गतिविधियां नष्ट हो गई थीं (मान लीजिए कि कुछ सेवा चल रही थी)। जब गतिविधि फिर से शुरू होती है, तो स्थैतिक चर अंतिम संग्रहित मूल्य के साथ मौजूद होगा? – Ahmed

7

जवाब है (3)। यदि आपको मूल्यों को रखने की आवश्यकता है, तो उन्हें साझा प्राथमिकताओं में रखें जब प्रत्येक गतिविधि रुक ​​जाती है और इसे फिर से बहाल करते समय पुनर्स्थापित करती है। वैकल्पिक रूप से, आप "प्रारंभिक" स्थैतिक ध्वज को भी बनाए रख सकते हैं और किसी भी गतिविधि की onCreate() विधि से स्थिर चर को पुन: प्रारंभ कर सकते हैं यदि यह गलत है।

+0

आपके उत्तर के लिए धन्यवाद। – jsstp24n5

+0

@Criticalquestionnaire - मुझे यकीन नहीं है कि आप क्या खोज रहे हैं, लेकिन [स्टोरेज विकल्प] (http://developer.android.com/guide/topics/data/data-storage.html) पर मार्गदर्शिका विषय देखें डेटा कैसे जारी रखें। –

10

अच्छा स्पष्टीकरण यहां 2:50 http://www.infoq.com/presentations/Android-Design

यहाँ से देखी जा सकती है कर रहे हैं जो उन लोगों के लिए मैन्युअल रूप से इस मुद्दे का परीक्षण करना चाहते के लिए कुछ निर्देश: एंड्रॉयड v.4 एमुलेटर बनाएं, फिर सेटिंग पर जाएं -> डेवलपर सेटिंग -> पृष्ठभूमि कार्यों को अक्षम करें। फिर 2 गतिविधियों के साथ नमूना एंड्रॉइड प्रोजेक्ट बनाएं, गतिविधि ए में स्थैतिक चर घोषित करें, इसे क्रिएट() विधि में प्रारंभ करें। गतिविधि ए में एक बटन रखें जो गतिविधि बी शुरू करता है। गतिविधि बी की ऑनक्रेट() विधि में एक्टिक वार के मूल्य को लॉगकैट पर प्रिंट करें।

प्रोजेक्ट लॉन्च करें - गतिविधि ए प्रकट होता है। बटन दबाएं - गतिविधि बी प्रकट होता है, स्थैतिक चर का मान लॉगकैट पर मुद्रित होता है। होम बटन दबाएं और कोई अन्य प्रोग्राम लॉन्च करें - आपकी नमूना परियोजना प्रक्रिया मारे जायेगी (क्योंकि आपने पृष्ठभूमि प्रक्रियाओं को अक्षम कर दिया है)। अब घर बटन पर लंबे समय तक दबाएं - आपको हाल ही में लॉन्च किए गए कार्यक्रमों की सूची दिखाई देगी। अपने नमूना प्रोजेक्ट का चयन करें - ओएस आपके प्रोजेक्ट की गतिविधियों को बैक-स्टैक को पुनर्प्राप्त करने और अंतिम चलने वाली गतिविधि बी को फिर से बनाने का प्रयास करेगा। लेकिन इस चरण में प्रोग्राम नलपॉन्टर एक्सेप्शन के साथ क्रैश हो जाएगा क्योंकि एस्टैटिकवर शून्य होगा, और हम इसे लॉगकैट पर प्रिंट करने की कोशिश कर रहे हैं।