दो दिनों में Samsung Galaxy A06 को लक्षित करने वाला यह दूसरा फिक्स है। कल जारी किया गया वर्शन 1.0.10 इस डिवाइस पर स्टार्टअप क्रैश को ठीक करता था। 1.0.10 इंस्टॉल होने के कुछ ही घंटों बाद Google Play Console के ज़रिए एक नई समस्या सामने आई, जो पहले से अलग थी — इस बार एक ANR (कुछ सेकंड के लिए ऐप फ्रीज़)। विस्तृत रिपोर्ट की बदौलत तेज़ी से फिक्स करना संभव हुआ, और यह वर्शन ड्रॉअर में आइकन नियॉन इफ़ेक्ट के डिस्प्ले न होने की समस्या को भी ठीक करता है।

1.0.11 — Samsung Galaxy A06 पर स्टार्टअप ANR

लक्षण

Samsung Galaxy A06 (Android 16) पर, इंस्टॉल के बाद पहली बार Sola लॉन्च करने पर, ऐप 5 से 6 सेकंड के लिए फ्रीज़ हो जाता था, इससे पहले कि Android "Sola जवाब नहीं दे रहा — प्रतीक्षा करें / बलपूर्वक बंद करें" डायलॉग बॉक्स दिखाता। 1.0.10 के क्रैश के विपरीत, ऐप अचानक बंद नहीं होता था: यह बस कई सेकंड तक अनुपयोगी बना रहता था।

तकनीकी रूप से, Play Console द्वारा रिपोर्ट किया गया ट्रेस "Input dispatching timed out" प्रकार के ANR को दर्शाता था — Android निगरानी करता है कि मुख्य थ्रेड इनपुट इवेंट्स (टैप, स्वाइप) को 5 सेकंड के भीतर प्रोसेस करे। इससे आगे, सिस्टम ऐप को अटका हुआ मानता है और यूज़र को इसे बंद करने का सुझाव देता है।

कारण

Samsung Galaxy A06 में एंट्री-लेवल प्रोसेसर (Unisoc T606, चार कोर 1.6 GHz पर) और एक साधारण GPU लगा है। यह उन डिवाइसों (Pixel 8 Pro, Pixel Tablet) की तुलना में कई गुना धीमा है जिन पर Sola आमतौर पर टेस्ट किया जाता है।

होम स्क्रीन स्टार्टअप पर, Sola ग्रिड में मौजूद सभी ऐप आइकन (आमतौर पर 15 से 25 ऐप, साथ ही फ़ोल्डरों में रखे गए) को एक ही पास में लोड करता है। हर आइकन PackageManager.getApplicationIcon() से गुज़रता है, जो एक Android मेथड है जो टार्गेट APK खोलता है, अडैप्टिव आइकन की XML परिभाषा पढ़ता है, फिर दो बिटमैप इमेज (फोरग्राउंड लेयर और बैकग्राउंड) को डिकोड करता है।

Pixel 8 Pro पर, हर डिकोडिंग में करीब दस मिलीसेकंड लगते हैं — 20 आइकन 300 ms से भी कम में दिख जाते हैं, जो बिल्कुल भी नज़र नहीं आता। A06 पर, वही डिकोडिंग प्रति आइकन 200 से 500 मिलीसेकंड लेती है। 20 आइकन × 300 ms = 6 सेकंड का ठहराव। इसके अलावा यह लोडिंग मुख्य थ्रेड (जो यूज़र के टैप को प्रोसेस करता है) पर हो रही थी, जिसकी वजह से ANR ट्रिगर होता था।

फिक्स

होम ग्रिड को डेटा देने वाला फ़्लो अब flowOn(Dispatchers.IO) के ज़रिए इनपुट/आउटपुट थ्रेड पूल तक सीमित कर दिया गया है। सीधे शब्दों में, अब सारी आइकन डिकोडिंग समर्पित थ्रेड्स पर समानांतर रूप से चलती है। केवल अंतिम सूची (20 आइकन डिकोड हो जाने के बाद) डिस्प्ले के लिए मुख्य थ्रेड तक पहुँचती है। मुख्य थ्रेड भारी लोडिंग के दौरान भी हमेशा रिस्पॉन्सिव बना रहता है।

यही फिक्स उस फ़्लो पर भी लागू किया गया है जो फ़ोल्डरों को उनके ऐप्स के साथ सूचीबद्ध करता है, जो इसी समस्या से जूझ रहा था।

Galaxy A06 के स्पेसिफिकेशन (720×1600, 260 dpi, Android 16, धीमेपन का अनुकरण करने के लिए सॉफ़्टवेयर GPU) की नकल करने वाले एमुलेटर पर वेरिफ़ाई किया गया: होम स्क्रीन तुरंत दिखती है, कोई ANR ट्रिगर नहीं होता।

ड्रॉअर में गायब आइकन नियॉन इफ़ेक्ट

लक्षण

"नियॉन इफ़ेक्ट" ऑप्शन ऑन करके किसी बिल्ट-इन आइकन पैक (Pixelarticons, Lucide, Game-Icons…) को चुनने पर, आइकन होम, फ़ोल्डरों और डॉक में सही ढंग से चमकदार हेलो दिखाते थे। लेकिन ऐप ड्रॉअर में हेलो गायब हो जाता था: आइकन बिना नियॉन इफ़ेक्ट के अपने साधारण रंग में दिखते थे।

कारण

नियॉन इफ़ेक्ट एक ड्रॉएबल-रैपर के ज़रिए लागू किया गया है जो रेंडरिंग के समय ओरिजिनल आइकन को हेलो जोड़ने के लिए लपेटता है। ऐप आइकन लोड करने के दो अलग-अलग कोड पाथ हैं: एक होम और फ़ोल्डरों के लिए, दूसरा ड्रॉअर के लिए (जो सभी इंस्टॉल किए गए ऐप्स को एक साथ सूचीबद्ध करता है)।

होम द्वारा इस्तेमाल किए जाने वाले पाथ में इस रैपर को सुरक्षित रखने के लिए पहले से ही एक विशेष अपवाद मौजूद था। ड्रॉअर द्वारा इस्तेमाल किए जाने वाले पाथ में यह अपवाद नहीं था: यह हमेशा ड्रॉएबल का एक नया इंस्टेंस बनाने के लिए constantState.newDrawable() को कॉल करता था, जिसका साइड इफ़ेक्ट नियॉन रैपर को हटाना होता था और नीचे केवल साधारण आइकन ही बचता था।

फिक्स

NeonDrawable अपवाद को ड्रॉअर पाथ पर पोर्ट कर दिया गया है: जब लोड किया गया आइकन एक नियॉन रैपर होता है, तो उसे क्लोन करने के बजाय वैसे का वैसा ही रखा जाता है। अब हेलो इफ़ेक्ट ड्रॉअर में भी बाकी सभी जगहों की तरह सुरक्षित रहता है।

दोनों पाथ (होम और ड्रॉअर) के साथ-साथ विपरीत व्यवहार (क्लासिक ड्रॉएबल को पैक बदलने पर साइड इफ़ेक्ट से बचने के लिए ज़रूर क्लोन किया जाना चाहिए) को लॉक करने के लिए तीन यूनिट टेस्ट जोड़े गए हैं। इस तरह की भविष्य की रिग्रेशन को पहले ही पकड़ लिया जाएगा।

अपडेट कैसे पाएं

1.0.11 को Play Store के ज़रिए धीरे-धीरे रोलआउट किया जा रहा है (20% यूज़र्स से शुरुआत, फिर 24 से 48 घंटों में धीरे-धीरे 100% तक)। दो दिनों के भीतर यह सभी के लिए उपलब्ध हो जाना चाहिए। Play Store ऐप के "ऐप्स और डिवाइस मैनेज करें" सेक्शन से भी अपडेट चेक करने को फ़ोर्स करना संभव है।

Google Play पर खोलें