2012-09-28 12 views
59

मैंने अपने ऐप में साझा किए गए संदर्भों में उपयोगकर्ता सेटिंग्स को संग्रहीत किया है। जब मैं ऐप के नए संस्करण में Google Play Store के माध्यम से ऐप अपडेट करता हूं तो साझा किए गए संदर्भों के साथ क्या होगा?एंड्रॉइड ऐप अपडेट करने पर साझा किए गए संदर्भों का क्या होगा?

क्या साझा किए गए अपडेट अभी भी अपडेट के बाद होंगे या उन्हें हटा दिया जाएगा?

अभी तक मुझे वेब पर कोई जवाब नहीं मिला है या स्टैक ओवरफ्लो (क्या मैं गलत कीवर्ड खोज सकता हूं?)।

क्या आप मुझे इस प्रक्रिया का वर्णन करने वाले कुछ लिंक पर इंगित कर सकते हैं?

संपादित करें: इस बीच मैं एक अन्य जवाब भी मिला: SharedPreferences behaviour on Update/Uninstall

संपादित करें 2: पिछले काफ़ी समय था जब मैं पहली बार यह सवाल मैं हाल ही में पता चला पूछा के बाद से है कि चूंकि Android 6.0 (एपीआई 23) द्वारा वर्णित आपकी साझा प्राथमिकताओं को सुरक्षित पर ऑटो बैकअप कार्यक्षमता का उपयोग करना भी संभव है। बस अपनी AndroidManifest.xml फ़ाइल में allowBackup="true" जोड़ें।

उत्तर

57

क्रिस्टियन here कहता है: जब उपयोगकर्ता अपडेट अपडेट करते हैं तो आपका एप्लिकेशन डेटा तब रहेगा।

लेकिन यह पिछले ऐप के अपडेट के रूप में पता लगाने के लिए package name के साथ होना चाहिए।

Warning Android user that app update could lead to losing data from old app version? में

EboMike का कहना है:

काफी स्पष्ट रूप से, एक उन्नत की वजह से डेटा को खोने अस्वीकार्य है।

संपादित:

आम तौर पर, SharedPreferences (और साथ ही अन्य उपयोगकर्ता डेटा) कुछ "अज्ञात" समस्या के कारण अद्यतन प्रक्रिया के दौरान रखा जाएगा, लेकिन कभी कभी, डेटा खो सकता है, और मुझे लगता है कि यह आपके नियंत्रण से बाहर है। इसलिए, आप बस विश्वास कर सकते हैं कि साझा किए गए संदर्भ रखे जाएंगे (see here)।

तो, यदि आप प्रगति को अपग्रेड करने में उपयोगकर्ता के डेटा को साफ़ करने से बचना चाहते हैं, तो आपको बाहरी डेटा को मुख्य भंडारण में सहेजना होगा (यह एक हटाने योग्य स्टोरेज मीडिया हो सकता है, जैसे कि एसडी कार्ड या आंतरिक, गैर-हटाने योग्य, भंडारण ।) और आपके ऐप के लिए निजी नहीं है। या कम से कम उपयोगकर्ता को अपग्रेड करने से पहले बैकअप डेटा के लिए हटा दें। फिर अपने (अपग्रेड किए गए) ऐप के पहले भाग में, जांचें कि बाहरी स्टोरेज में कोई बैकअप फ़ाइल है या नहीं।

यदि आप जानना चाहते हैं तो ऐप को अपग्रेड करने के लिए क्या चीजें हो सकती हैं/हो सकती हैं?, इस के लिए मेरे पास कोई अच्छा विवरण नहीं था।यह Android Security, Application signing, copy protection और अन्य विषयों के साथ जटिल और सापेक्ष है। मेरा मतलब है कि यदि आप किसी भी उपरोक्त क्षेत्रों में अपनी ऐप की स्थिति बदलते हैं, तो यह अलग-अलग परिणाम का कारण बनता है।
उदाहरण के लिए यदि आप CHANGED COPY PROTECTION FROM ON to OFF OR OFF to ON, तो आपकी ऐप अपडेट हो जाएगी, लेकिन आपकी सभी साझा प्राथमिकताओं को खोने के कारण, फाइल एक्सेस असंभव हो सकती है और ...।
हालांकि आपको पिछले ऐप के अपडेट के रूप में अपनी नई ऐप being considered का कारण बनने की स्थिति में देखभाल करना है (Things That Cannot Change देखें)।

इसके अलावा आपको अपने कोड के बारे में भी ध्यान रखना होगा, यह आपके डेटाबेस के डेटा को हटाने के कारण हो सकता है (update app with preloaded SQLite देखें)।

लेकिन अंतत, अगर सावधान रहना होगा, आप कह सकते हैं:

अद्यतन प्रक्रिया केवल apk फ़ाइल को बदल देता है (और इसलिए क्या उदाहरण ड्रॉएबल के लिए उस में है, ...) और नहीं है डेटाबेस को बदलें, साझा किए गए संदर्भ और रन टाइम में उत्पन्न होने वाली कोई अन्य फ़ाइलें (शायद इस मामले में, नई ऐप यूआईडी के साथ स्थापित है जो पिछली ऐप के यूआईडी के बराबर है)।

आप अधिक जानकारी के लिए इन पृष्ठों देख सकते हैं:

Help!? Updating our applicatoin on the market deletes the saved SharedPreferences.
Market copy protection totally breaks file access after updating
Can someone explain the App update process?

+0

धन्यवाद, ऐसा लगता है कि साझा किए गए संदर्भों को ठीक रखा जाना चाहिए। लेकिन क्या इस प्रक्रिया का कोई आधिकारिक विवरण नहीं है? –

+0

@ वाइपरबोन जो प्रक्रिया करता है? साझािकरणों को जोड़ना? या ऐप को अपग्रेड करना? – hasanghaforian

+0

ऐप्स प्रक्रिया को अपग्रेड करना। ऐप को अपग्रेड करने के लिए क्या चीजें हो सकती हैं/हो सकती हैं। –

4

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

4

4 घंटे से अधिक समय डिबगिंग के बाद मैं पता चला कि मैं यह serializing द्वारा स्ट्रिंग के रूप में एक मॉडल की बचत की गई थी । एक serializable वर्ग नाम serialVersionUID द्वारा एक अद्वितीय आईडी है, जिसे रनटाइम पर डिफ़ॉल्ट रूप से सेट किया गया है और आईडी को कक्षा, इंटरफेस और वेरिएबल नामों के नाम से भी गणना की जाती है। मैंने पाया कि मैंने मॉडल क्लास बदल दी है, एक वैरिएबल जोड़ा है और फिर ऐप को अपडेट किया है। चूंकि वर्ग अभी बदल गया है एक नया serialVersionUID स्थापित किया गया था और अद्यतन पर इसलिए, यह स्ट्रिंग deserialize और मॉडल बनाने के लिए सक्षम नहीं था और java.io.InvalidClassException

दे रहा था स्पष्ट रूप से इस से बचने के लिए serialVersionUID सेट अंक

static final long serialVersionUID = 42L; 
संबंधित मुद्दे