2009-07-29 13 views
7

मैं अपने कोड में एक स्थैतिक वर्ग का उपयोग करता हूं जो एक स्थिर क्षेत्र को परिभाषित करता है जिसे मैं गतिविधि ऑनस्टॉप/ऑनस्टार्ट इनवोकेशन के बीच पुन: उपयोग कर रहा हूं। यहाँ एक परिदृश्य है:एंड्रॉइड में स्थिर सुरक्षित है?

  1. उपयोगकर्ता "अधिकृत करें" बटन (स्थिर डेटा आरंभ नहीं हो जाता)
  2. गतिविधि बंद कर दिया जाता है और वेब ब्राउज़र
  3. ब्राउज़र कहा जाता है कॉलबैक और गतिविधि कार्यान्वित पुनर्स्थापित किया जाता है (स्थिर डेटा पुन: उपयोग किया जाता है) पर क्लिक करता है

कम से कम मेरी उपयोगकर्ताओं में से एक चरण 3 में विफलता जो मैं पुन: पेश नहीं कर सकता लेकिन जो स्थिर डेटा

कोई सुझाव के रीसेट की तरह दिखता है रिपोर्ट?

उत्तर

10

यह सुरक्षित नहीं है। आपकी प्रक्रिया को ऑनस्ट और ऑनस्टार्ट के बीच मारा जा सकता है, इसलिए सभी स्थिर डेटा समाप्त हो जाएंगे। वास्तव में आपकी गतिविधि को रोकने से पहले भी मार डाला जा सकता है। आपके परीक्षणों में प्रक्रिया नहीं मारा गया था, लेकिन यह उपयोगकर्ता के लिए था। Android activity life चक्र देखें जिसमें संभावनाओं को दिखाते हुए एक अच्छा प्रवाह चार्ट है।

उदाहरण के लिए आपको डेटा को किसी अन्य तरीके से, prefs या डेटाबेस में स्टोर करने की आवश्यकता है।

+0

धन्यवाद Heikki। मुझे लगता है कि मुझे पता है कि इस बिंदु पर क्या करना है – Bostone

+1

हेइककी, आप अनुप्रयोग संदर्भ में स्थिर var रखने के बारे में क्या सोचते हैं? क्या यह इस तरह से सुरक्षित है? –

+1

यह सुरक्षित होना चाहिए, लेकिन मुझे उस ऑब्जेक्ट में स्थैतिक var बनाने में बिंदु दिखाई नहीं देता है जब तक प्रक्रिया जीवित रहती है। एक सामान्य var अनुप्रयोग संदर्भ और अनुप्रयोग ऑब्जेक्ट दोनों में पर्याप्त होना चाहिए। –

0

यदि यह स्थिर डेटा उस गतिविधि से संबंधित है जिसे आपने अभी रोक दिया है - तो आप सामान्य गैर स्थिर फ़ील्ड + ऑनसेवस्टेंसस्टेट विधि का उपयोग कर सकते हैं।

@Override 
protected void onSaveInstanceState(Bundle outState) { 
    // ... save your Serializable data here in outState bundle 
    super.onSaveInstanceState(outState); 
} 

मामला होगा:

  1. आप अपनी गतिविधि बंद करने और (जहां आप डेटा को बचाने onSaveInstanceState शुरू हो जाती है) ब्राउज़र पर जाएं (onStop शुरू हो जाती है)
  2. प्रणाली आपके आवेदन की प्रक्रिया को मारता है
  3. उपयोगकर्ता आपकी गतिविधि पर वापस जाता है (ऑनक्रेट सेव किया गया है इन्स्टेंसस्टेट पैरामीटर)

ज्यादातर मामलों में दूसरा बिंदु नहीं होगा। सिस्टम आपकी ऐप प्रक्रिया को मारने की ज़रूरत नहीं है। जब ऐसा नहीं होता है - आपको क्रिएट विधि नहीं मिलती है लेकिन ऑनस्टार्ट और ऑनयूज विधियों पर और आपके फ़ील्ड अपरिवर्तित होंगे।

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