İki gün içinde Samsung Galaxy A06'yı hedef alan ikinci yama. Dün yayınlanan 1.0.10 sürümü bu cihazdaki başlangıç çökmesini düzeltiyordu; 1.0.10 kurulduktan sadece birkaç saat sonra Google Play Console üzerinden yeni bir sorun bildirildi, farklı bir sorun — bu sefer bir ANR (uygulamanın birkaç saniye donması). Ayrıntılı rapor sayesinde hızlı bir düzeltme yapılabildi ve bu sürüm çekmecedeki simge neon efektinin görüntülenmeme sorununu da çözüyor.

1.0.11 — Samsung Galaxy A06'da Başlangıç ANR'si

Belirti

Samsung Galaxy A06'da (Android 16), kurulumdan sonra Sola'yı ilk kez başlatırken, Android "Sola yanıt vermiyor — Bekle / Zorla Kapat" iletişim kutusunu göstermeden önce uygulama 5-6 saniye boyunca donuyordu. 1.0.10'daki çökmenin aksine uygulama aniden kapanmıyordu: sadece birkaç saniye boyunca kullanılamaz durumda kalıyordu.

Teknik olarak, Play Console'un bildirdiği iz kaydı "Input dispatching timed out" türünde bir ANR gösteriyordu — Android, ana iş parçacığının giriş olaylarını (dokunma, kaydırma) 5 saniye içinde işlediğini denetler. Bu süre aşıldığında sistem uygulamayı kilitlenmiş sayar ve kullanıcıya kapatma seçeneği sunar.

Neden

Samsung Galaxy A06, giriş seviyesi bir işlemciye (Unisoc T606, dört çekirdek 1.6 GHz) ve mütevazı bir GPU'ya sahip. Sola'nın genellikle test edildiği cihazlara (Pixel 8 Pro, Pixel Tablet) göre kat kat daha yavaş.

Ana ekran başlangıcında Sola, ızgarada bulunan tüm uygulama simgelerini (tipik olarak 15 ila 25 uygulama, artı klasörlerde yer alanlar) tek geçişte yüklüyor. Her simge, hedef APK'yı açan, uyarlanabilir simgenin XML tanımını okuyan ve ardından iki bitmap görüntüyü (ön plan katmanı ve arka plan) çözen bir Android metodu olan PackageManager.getApplicationIcon()'dan geçiyor.

Pixel 8 Pro'da her çözme işlemi yaklaşık on milisaniye sürüyor — 20 simge 300 ms'den kısa sürede görüntüleniyor, tamamen fark edilmiyor. A06'da aynı çözme işlemi simge başına 200 ila 500 milisaniye sürüyor. 20 simge × 300 ms = 6 saniyelik donma. Üstelik bu yükleme, kullanıcının dokunmalarını işleyen ana iş parçacığında gerçekleşiyordu, bu da ANR'yi tetikliyordu.

Düzeltme

Ana ekran ızgarasını besleyen akış artık flowOn(Dispatchers.IO) aracılığıyla giriş/çıkış iş parçacığı havuzuna sınırlandırıldı. Somut olarak, tüm simge çözme işlemleri artık ayrılmış iş parçacıklarında paralel olarak yürütülüyor. Sadece son liste (20 simge çözüldükten sonra) görüntülenmek üzere ana iş parçacığına ulaşıyor. Ana iş parçacığı, ağır bir yükleme sırasında bile her zaman duyarlı kalıyor.

Aynı sorundan muzdarip olan, klasörleri içerdikleri uygulamalarla birlikte listeleyen akışa da aynı düzeltme uygulandı.

Galaxy A06 özelliklerini (720×1600, 260 dpi, Android 16, yavaşlığı simüle etmek için yazılım GPU'su) yeniden üreten bir emülatörde doğrulandı: ana ekran anında görüntüleniyor, hiçbir ANR tetiklenmiyor.

Çekmecede Eksik Olan Simge Neon Efekti

Belirti

"Neon efekti" seçeneği etkinken yerleşik bir simge paketi (Pixelarticons, Lucide, Game-Icons…) seçildiğinde, simgeler ana ekranda, klasörlerde ve dock'ta ışıklı bir hale gösteriyordu. Ancak uygulama çekmecesinde hale kayboluyordu: simgeler neon efekti olmadan düz renklerinde görünüyordu.

Neden

Neon efekti, orijinal simgeyi işleme anında hale eklemek için saran bir drawable-wrapper aracılığıyla uygulanıyor. Uygulama simgelerini yükleyen iki farklı kod yolu var: biri ana ekran ve klasörler için, diğeri ise çekmece için (kurulu tüm uygulamaları tek seferde listeleyen).

Ana ekran tarafından kullanılan yolda bu wrapper'ı korumak için zaten özel bir istisna vardı. Çekmece tarafından kullanılan yolda ise bu istisna yoktu: drawable'ın yeni bir örneğini oluşturmak için her zaman constantState.newDrawable() çağrılıyordu, bunun da yan etkisi neon wrapper'ının çözülmesi ve altındaki sadece düz simgenin kalmasıydı.

Düzeltme

NeonDrawable istisnası çekmece yoluna taşındı: yüklenen simge bir neon wrapper olduğunda, klonlamak yerine olduğu gibi tutuluyor. Hale efekti artık diğer her yerde olduğu gibi çekmecede de korunuyor.

Her iki yolu (ana ekran ve çekmece) ve ters davranışı (klasik drawable'ların paket değişiminde yan etkileri önlemek için mutlaka klonlanması gerekir) sabitlemek için üç birim testi eklendi. Bu tür bir gerileme gelecekte daha erken aşamada tespit edilecek.

Güncellemeyi Nasıl Alırsınız

1.0.11, Play Store üzerinden kademeli olarak dağıtılıyor (kullanıcıların %20'siyle başlayıp 24 ila 48 saat içinde %100'e kademeli olarak yükseliyor). İki gün içinde herkes için kullanılabilir olması bekleniyor. Play Store uygulamasının "Uygulamaları ve cihazı yönet" bölümünden de güncelleme kontrolünü zorlamak mümkün.

Google Play'de Aç