Sık karşılaşılan performans sorunlarını giderme

Sorunsuz, kararlı ve pilden tasarruf sağlayan bir uygulama deneyimi sunmak için kararlılık, kullanıcı arayüzü oluşturma, bellek tüketimi, arka plan çalışması, başlatma gecikmesi ve derleme optimizasyonu gibi alanlarda yaygın performans darboğazlarının belirlenip çözülmesi gerekir.

Bu bölümdeki kılavuzlarda, her sorun türü için temel Android platform davranışları açıklanmakta ve Android Studio Profiler, Perfetto, Logcat ve ApplicationExitInfo gibi araçlar kullanılarak sorunların nasıl teşhis edileceği, profillendirileceği ve düzeltileceği adım adım anlatılmaktadır.

Kararlılık

  • ANR'ler: Engellenen kullanıcı arayüzü iş parçacıklarının, ana iş parçacığı G/Ç'sinin, kilit çekişmesinin veya yavaş yayın alıcılarının neden olduğu uygulama yanıt vermiyor (ANR) hatalarını teşhis edin ve düzeltin.
  • Kilitlenmeler: Yığın izlemeleri okuyun, Logcat çıkışını inceleyin ve işlenmemiş istisnaları ve yerel sinyalleri önleyin.

Oluşturma ve başlatma

  • Yavaş oluşturma: Pahalı düzenler, bağlama geçişleri veya ana iş parçacığı duraklamalarından kaynaklanan, bırakılan ya da dondurulan kullanıcı arayüzü çerçevelerini (>16ms ve >700ms) belirleyip düzeltin.
  • Yavaş oturumlar (yalnızca oyunlar): SurfaceFlinger ile kare hızını ölçün ve Android Frame Pacing (Swappy), Vulkan ve Android Dynamic Performance Framework (ADPF) kullanarak oyun kare hızlarını optimize edin.
  • Uygulama başlatma süresi: Yeni, sıcak ve hazır başlatma işlemlerinin iç işleyişini anlayın, ilk ekran görüntülenene kadar geçen süreyi (TTID) ve tam ekran görüntülenene kadar geçen süreyi (TTFD) ölçün ve başlatma işlemlerini optimize edin.

Bellek yönetimi

  • Düşük bellek sonlandırıcılar (LMK'ler): Android düşük bellek sonlandırıcı arka plan programının (lmkd) işlemlere oom_adj_score üzerinden nasıl öncelik verdiğini ve Android Studio, Unity ve Unreal Engine'de bellekte kaplanan yerin nasıl profillendirildiğini öğrenin.
  • Bellek kullanımı (anonim RSS + takas): Uygulamanızın anonim yerleşik küme boyutunu (RSS) ve takas bellekte kaplanan yerini ön plan, hizmet ve arka plan durumlarında ölçüp azaltın.
  • Bit eşlem bellek kullanımı: Aşırı büyük veya sızdırılmış bit eşlem ayırmalarını teşhis edin ve kullanıcı arayüzü bileşenleri arka plana taşındığında grafik arabelleklerini serbest bırakın.

Pil ve arka planda çalışma

İzinler ve derleme optimizasyonu

  • İzin reddetme: Çalışma zamanında izinleri bağlam içinde isteyin ve izin gerekçesini kullanıcılara net bir şekilde açıklayın.
  • DEX kodu optimizasyonu: DEX boyutunu küçültmek ve çalışma zamanı performansını artırmak için R8 küçültme, karartma ve optimizasyon kurallarını yapılandırın.