2013-07-19 11 views
8

Play Store ऐप अपडेट करते समय डिवाइस पर वर्कफ़्लो क्या है? क्या होता है यदि उपयोगकर्ता एक ही समय में ऐप का उपयोग कर रहा है?ऐप अपडेट होने पर एंड्रॉइड डिवाइस पर क्या होता है?

मैं पूछता हूं क्योंकि हमारे पास कुछ क्रैश हैं जहां एक स्ट्रिंग आईडी नहीं मिल सकती है, और जब हमने एपीके को देखा तो स्ट्रिंग संसाधन दोनों संस्करणों में उपलब्ध है - लेकिन दुर्घटनाओं में रिपोर्ट की गई हेक्स आईडी OLD एपीके में पाई जाती है और नए में नहीं। यह अजीब है।

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

यह कैसे संभव है? क्या यह भी संभव है? मुझे नहीं लगता, सिवाय इसके कि हमने एपीके में देखा और क्रैश में मौजूद आईडी पुराने संसाधन आईडी से मेल खाती है, न कि नया जिसे हमने अभी धक्का दिया था।

+3

जहां तक ​​मुझे पता है, ऐप को अपडेट किए जाने से पहले ऐप प्रक्रिया को रोका जाना चाहिए। @ शोभितपुरी - तत्काल प्रकाशन और अद्यतन वास्तव में यह नहीं बताता कि Google Play क्लाइंट डिवाइस पर चल रहे ऐप के साथ क्या करता है। –

+0

@TedHopp इसकी पुष्टि करना। मैं अपडेट करते समय ऐप का उपयोग कर रहा हूं और वे हमेशा खुद को बंद करते हैं। –

+0

मुझे बस एक ही समस्या थी।हालांकि ऐप अपडेट होने पर डेस्ट्रॉय/ऑनक्रेट/ऑन रेस्यूम पर जा रहा है, लेकिन यह वैश्विक स्थैतिक चर को फिर से लोड नहीं किया गया है। तो यदि आपने स्थिर स्थिर resic = r.id.something जैसे वैश्विक स्थिर चर घोषित किया है; बस इसे फिर से बनाएं (resId = R.id.something;)। – stefple

उत्तर

1

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

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

सूत्रों का कहना है: Notification of Update

What Happens When You Update an App

Google Play Saves Cost & Time

+0

मैं इस बात से सहमत हूं कि ऐप को अपडेट करने के लिए बंद करना चाहिए, लेकिन फिर मुझे स्ट्रिंग आईडी कैसे मिलेंगी जो केवल नए ऐप संस्करण से क्रैश लॉग में पुराने आर। जावा में हैं? –

+0

यह सवाल है, मुझे लगता है। आरजेवा स्टोर्स आईडी के तरीके से ऐसा कुछ करना होगा, या शायद एक फ़ाइल जिसे * अपडेट नहीं किया गया था * स्ट्रिंग आईडी का संदर्भ दिया गया था और यह अब नए आरजेवा में निहित नहीं था, इसलिए त्रुटि। क्या यह ऐसा कुछ है जिसे आप पुन: उत्पन्न करने में सक्षम थे, या यह आपके उपयोगकर्ता सेट के बड़े पैमाने पर हुआ था? या यह एक बार के लिए एक बार दुर्घटना थी? – Phoenix

+0

यह लगभग 300,000 ऐप अपग्रेड पर सैकड़ों क्रैश पैमाने पर हुआ, इसलिए केवल एक बार चीज नहीं। यह 2.3.x एंड्रॉइड संस्करणों के साथ-साथ टैबलेट और फोन दोनों पर 4.1.x संस्करणों में भी बताया गया है। –

0

उपयोगकर्ता एक ही समय यह एप्लिकेशन linux फाइल सिस्टम व्यवहार ऊपर वर्णित के लिए अनुमति देता है अद्यतन करने है पर एप्लिकेशन उपयोग कर रहा है। फ़ाइल खोलने वाली एक प्रक्रिया (ऐप चल रहा है, जबकि एप निष्पादन योग्य लगता है) निष्पादन योग्य छवि को मेमोरी में रखेगा भले ही डिस्क पर निष्पादन योग्य अद्यतन किया गया हो। यह क्या अनुमति देता है नया एपीके जगह में रखा जाना चाहिए और पुरानी एक्सई छवि के साथ अभी भी स्मृति में अनपॅक किया गया है।

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

+0

सिवाय इसके कि एंड्रॉइड ऐप बंद कर देता है अगर यह चल रहा है और इसके लिए एक अद्यतन स्थापित होना है। – AfzalivE

+0

यहां बड़ी "धूम्रपान बंदूक" हमारे नए ऐप संस्करण से क्रैश रिपोर्ट प्रतीत होती है जिसमें स्ट्रिंग आईडी केवल पुराने संस्करण के R.java = \ –

0

मुझे याद है कि इस तरह की समस्या का सामना करना पड़ रहा है - मेरी स्थिति में यह मुद्दा था कि हम उपयोगकर्ता प्राथमिकताओं के माध्यम से संसाधन आईडी (और यहां तक ​​कि सीरियलाइज्ड समेकित मान) संग्रहीत कर रहे थे। एक बार हमारे ऐप को अपडेट किया गया (नए समेकित मान, नए संसाधन), पुराने मान उपयोगकर्ता प्राथमिकताओं से लोड किए गए थे और कोड में पास हुए, जिसके परिणामस्वरूप दुर्घटनाएं हुईं।

शायद यह आपकी समस्या नहीं है, लेकिन यह देखने के लायक है कि आप उन संसाधनों के लिए आईडी संग्रहीत/लोड नहीं कर रहे हैं जो अब मौजूद नहीं हैं।

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