Kullanıcı arayüzü olumsuzluk algılama

Android, uygulamanızdan bir çerçeve oluşturup ekranda göstererek kullanıcı arayüzünü oluşturur. Uygulamanızda kullanıcı arayüzü yavaş oluşturuluyorsa sistem, kareleri atlamak zorunda kalır. Bu durumda kullanıcı, ekranında jank olarak adlandırılan tekrarlayan bir titreme görür.

Duraklama genellikle kullanıcı arayüzü iş parçacığında (çoğu uygulamada ana iş parçacığıdır) bazı yavaşlamalar veya engelleme eş zamansız çağrılarından kaynaklanır. Sorunun kaynağını belirlemek için sistem izlemelerini kullanabilirsiniz.

Jetpack Compose kullanıyorsanız izlemede oluşturma performansını incelemenin en iyi yolu birleştirme izlemeyi etkinleştirmektir. Sık karşılaşılan Compose performans sorunları hakkında bilgi edinmek için Jetpack Compose Performansı başlıklı makaleyi inceleyin.

Compose uygulamalarında, uygulamanızın makro düzeyde görünümüne ihtiyacınız olduğunda bu kılavuzdaki adımları kullanın. Burada tanıtılan sistem izleme, ana iş parçacığını engelleyen sistem düzeyindeki sorunlardan (ör. yoğun disk G/Ç, agresif atık toplama veya GPU oluşturma performans sorunları) kaynaklanan duraklamaları belirlemenize yardımcı olur. Jank'i kullanıcı arayüzü katmanınızda izole ettiyseniz Jetpack Compose Performansı kılavuzunu kullanın. Bu kılavuz, aşırı yeniden oluşturma, durumu yanlış aşamada okuma veya kararsız parametreler kullanma gibi Compose'a özgü verimsizlikleri düzeltmenize yardımcı olur.

Android 12 ve sonraki sürümlerde duraklamayı tespit etme

Android 12 (API düzeyi 31) veya sonraki sürümleri kullanan cihazlarda, yakalanan izleme CPU Profiler'daki Ekran bölmesinin altındaki Janky frames (Janky kareler) parçasında gösterilir.

Duraklamayı tespit etmek için:

  1. Android Studio'da View > Tool Windows > Profiler'ı (Görünüm > Araç Pencereleri > Profiler) seçin veya araç çubuğunda Profile'ı (Profil) tıklayın.

    Dağıtım Hedefini Seçin iletişim kutusu tarafından istenirse uygulamanızı profil oluşturma için dağıtacağınız cihazı seçin. Bir cihazı USB üzerinden bağladıysanız ancak listelenmiş olarak görmüyorsanız USB hata ayıklamayı etkinleştirdiğinizden emin olun.

  2. CPU Profiler'ı açmak için CPU zaman çizelgesinde herhangi bir yeri tıklayın.

  3. CPU Profiler'daki yapılandırmalar menüsünden System Trace'i (Sistem İzleme) seçin ve Record'u (Kaydet) tıklayın. Uygulamanızla etkileşimi tamamladığınızda Durdur'u tıklayın.

  4. Görüntü bölümünde Janky frames (Titrek kareler) izini görmeniz gerekir. Varsayılan olarak, Profil Oluşturucu yalnızca incelenecek aday olarak sorunlu kareleri gösterir. Her bir titrek karede, kırmızı kısım karenin oluşturma son tarihini aşan süresini vurgular. Janky frames parçasının ekran görüntüsü

  5. Düzensiz bir kare bulduğunuzda bu kareyi tıklayın. İsterseniz M tuşuna basarak yakınlaştırmayı ayarlayıp seçili kareye odaklanabilirsiniz. İlgili etkinlikler şu iş parçacıklarında vurgulanır: ana iş parçacığı, RenderThread ve GPU tamamlama. Janky kareleri ve ana ileti dizilerini gösteren Profiler'ın ekran görüntüsü

  6. İsteğe bağlı olarak, sırasıyla Tüm Kareler ve Yaşam Döngüsü onay kutularını işaretleyerek tüm kareleri veya oluşturma süresinin dökümünü görebilirsiniz. Yukarıdaki gibi Profil Oluşturucu'nun ekran görüntüsü ancak Tüm Kareler ve Yaşam Döngüsü onay kutuları işaretlenmiş

Android 11'de duraklamayı tespit etme

Android 11 (API düzeyi 30) kullanan cihazlarda, yakalanan izleme, CPU Profiler'daki Frame Lifecycle (Çerçeve Yaşam Döngüsü) bölümünde gösterilir.

Farklı parçalar içeren Frame Lifecycle bölümü

Frame Lifecycle (Çerçeve Yaşam Döngüsü) bölümünde katman adı ve dört parça bulunur. Her parça, kare oluşturma işlem hattındaki bir aşamayı temsil eder. Frame Lifecycle (Çerçeve Yaşam Döngüsü) öğeleri şunlardır:

  1. Çerçeve yaşam döngüsü (Katman adı): Bölüm başlığı, parantez içinde katman adını içerir. Katman, tek bir kompozisyon birimidir.
  2. Uygulama: Bu iz, arabellek uygulamanın kuyruğundan çıkarıldıktan sonra tekrar kuyruğa alınana kadar geçen süreyi gösterir. Bu genellikle RenderThread içindeki izleme etkinliklerine karşılık gelir.
  3. GPU'yu bekleme: Bu parça, arabelleğin GPU'ya ait olduğu süreyi gösterir. Bu süre, arabelleğin GPU'ya gönderildiği andan GPU'nun arabellekteki işini tamamladığı ana kadar geçen süredir. Bu, GPU'nun bu süre zarfında yalnızca bu arabellekte çalıştığı anlamına gelmez. GPU'nun belirli bir süre boyunca ne üzerinde çalıştığı hakkında ayrıntılı bilgi için Android GPU Inspector'ı kullanabilirsiniz.
  4. Bileşim: Bu iz, SurfaceFlinger'ın arabelleğe bağlandığı ve arabelleği bileşim için gönderdiği andan arabelleğin ekrana gönderildiği ana kadar geçen süreyi gösterir.
  5. Ekranda gösterilen kareler: Bu parça, karenin ekranda ne kadar süreyle kaldığını gösterir.

Frame Lifecycle (Kare Yaşam Döngüsü) bölümünde, bir kare arabelleğinin oluşturma ardışık düzeninin farklı aşamaları arasında nasıl hareket ettiği gösterilmektedir. Kareler, belirli bir kareyi takip etmeyi kolaylaştırmak için kare numarasına göre renk kodludur.

Android Studio, izlemedeki tüm kareleri All Frames (Tüm Kareler) sekmesinde tablo biçiminde de gösterir.

Tüm Kareler sekmesinde izlemedeki tüm karelerin tablosu

Kare #, Uygulama, GPU'yu bekleme ve Bileştirme sütunları, yukarıdaki Kare Yaşam Döngüsü bölümündeki parçalarla aynı verileri gösterir. Kare Süresi sütunu, Uygulama'nın başlangıcından Ekranda Gösterilen Kareler'in başlangıcına kadar geçen süreyi gösterir. Bu, bir karenin uçtan uca oluşturulması için gereken süreyi ifade eder.

En kısa veya en uzun kareyi hızlıca bulmak için kareler tablosunu herhangi bir sütuna göre sıralayabilirsiniz. Tablo, yüzlerce kare arasında gezinmenize yardımcı olan sayfalara ayırma kontrollerini de destekler.

Android 11'de duraklamaları tespit edip incelemek için aşağıdaki adımları uygulayın:

  1. Tüm Kareler tablosunu Uygulama sütununa göre azalan düzende sıralayın. Böylece, en uzun süren kareler önce görünür.

    Uygulama sütunu azalan düzende sıralandı

  2. En uzun süre çalışan kareleri bulup tablo satırını seçin. Bu işlem, sol taraftaki zaman çizelgesi görünümünde seçili kareyi yakınlaştırır.

    Kareler tablosunun yanında zaman çizelgesi görünümü

  3. Frame Lifecycle (Çerçeve Yaşam Döngüsü) ve Threads (İleti Dizileri) bölümlerinde ilgili ileti dizilerini bulun.

    Frame Lifecycle ve Threads bölümleri

Android 10 ve önceki sürümlerde duraklamayı tespit etme

Android 10 (API düzeyi 29) ve önceki sürümlerin kullanıldığı cihazlarda, ilgili OS grafikleri ardışık düzen bilgileri, CPU Profiler sistem izindeki Display adlı tek bir bölümde gösterilir.

Ekran kullanıcı arayüzü penceresi

  • Kareler: Bu bölümde, uygulamanızdaki kullanıcı arayüzü iş parçacığı ve RenderThread izleme etkinlikleri gösterilir. Saniyede 60 kare (fps) hızında oluşturma için son tarihi aştıkları için 16 ms'den uzun süren etkinlikler, olası takılan kareleri vurgulamak için kırmızı renkte gösterilir.
  • SurfaceFlinger: Bu bölümde, SurfaceFlinger'ın çerçeve arabelleklerini ne zaman işlediği gösterilir. SurfaceFlinger, arabellekleri ekrana göndermekten sorumlu bir sistem işlemidir.
  • VSYNC: Bu bölümde, görüntüleme ardışık düzenini senkronize eden bir sinyal olan VSYNC gösterilir. Parçada, uygulamanızın çok geç başlatıldığını gösteren VSYNC-app sinyali gösterilir. Bu durum genellikle kullanıcı arayüzü iş parçacığı meşgul olduğunda ortaya çıkar. Bu ayar, animasyon sırasında ekranınızda görünür bir titreşime neden olur ve animasyon veya kaydırma tamamlanana kadar ek giriş gecikmesi ekler. Bu, özellikle saniyede 60'tan fazla veya değişken bir hızda gerçekleşebileceğinden yüksek yenileme hızlı ekranlarda görüntülemek için önemlidir.
  • BufferQueue: Bu bölümde, kaç kare arabelleğinin sıraya alındığı ve SurfaceFlinger'in kullanmasını beklediği gösterilir. Android 9 (API seviyesi 28) veya sonraki sürümlerin yüklü olduğu cihazlara dağıtılan uygulamalar için bu iz, uygulamanın yüzeyinin BufferQueue (0, 1 veya 2) arabellek sayısını gösterir. BufferQueue, görüntü arabelleklerinin Android grafik bileşenleri arasında hareket ederkenki durumunu anlamanıza yardımcı olabilir. Örneğin, 2 değeri, uygulamanın şu anda üçlü arabelleğe alındığı ve bunun da ek giriş gecikmesine neden olduğu anlamına gelir.

Görüntü bölümü, olası duraklamaları tespit etmek için yararlı sinyaller sağlar. Örneğin, kullanıcı arayüzü iş parçacığı veya RenderThread 16 ms'den uzun sürdüğünde. Duraklamaya neyin neden olduğuna dair ayrıntıları incelemek için kullanıcı arayüzü oluşturmayla ilgili iş parçacıklarını gösteren İş Parçacıkları bölümünü inceleyebilirsiniz.

Görüntüleme bölümündeki İleti Dizileri

Yukarıdaki şekilde, Threads (İş Parçacıkları) bölümünde kullanıcı arayüzü iş parçacığı (java.com.google.samples.apps.iosched), RenderThread ve GPU completion iş parçacığı gösterilmektedir. Bunlar, kullanıcı arayüzü oluşturmayla ilgili olan ve duraklamaya neden olabilecek iş parçacıklarıdır.

Android 10 veya önceki sürümlerde duraklamayı tespit etmek için aşağıdaki adımları uygulayın:

  1. Görüntü'deki Kareler parçasına bakın. Kırmızı çerçeveler, araştırılmaya adaydır.

    Ekran bölümündeki Kareler

  2. Potansiyel olarak sorunlu bir kare bulduğunuzda W tuşuna basarak veya Control (macOS'te Command) tuşunu basılı tutarken fare tekerleğini kaydırarak yakınlaştırın. İzleme etkinliklerini kullanıcı arayüzü iş parçacığında ve RenderThread görmeye başlayana kadar yakınlaştırmaya devam edin.

    Kullanıcı arayüzü iş parçacığındaki ve RenderThread'deki etkinlikleri izleme

    Yukarıdaki şekilde, Choreographer#doFrame, kullanıcı arayüzü iş parçacığı animasyonu, görünüm düzeni, resim çizimi ve ilgili işlemleri koordine etmek için Choreographer'yi çağırdığında gösterilir. DrawFrames, RenderThread formlarının ne zaman oluşturulduğunu ve GPU'ya ne zaman gerçek çizim komutları gönderildiğini gösterir.

  3. Ana iş parçacığında özellikle uzun bir izleme etkinliği görürseniz hangi kullanıcı arayüzü bileşeninin veya composable işlevinin kareyi geciktirdiğini görmek için yakınlaştırın.

Perfetto ile gelişmiş inceleme

Android Studio sistem izi profil oluşturma görevi Perfetto tarafından desteklenir. Karmaşık oluşturma sorunlarıyla karşılaşıyorsanız ve özel SQL sorgularına ya da gelişmiş zaman çizelgesi gezinmesine ihtiyacınız varsa izleme analizinizi IDE dışında yapabilirsiniz.

Profiler bölmesinde İzlemeyi dışa aktar simgesini tıklayarak sistem izlemenizi Android Studio'dan dışa aktarın, ardından sonuç dosyasını web tabanlı Perfetto kullanıcı arayüzüne sürükleyin. Bu, sistem düzeyinde performans analizi için özel bir ortam sağlar. VSYNC, SurfaceFlinger ve Frame Timeline parçaları gibi OS grafik işlem hattının ayrıntılarını nasıl yorumlayacağınız hakkında bilgi edinmek için resmi Perfetto belgelerine bakın.

Daha fazla bilgi

Duraklamayı azaltma hakkında daha fazla bilgi edinmek için Duraklamanın yaygın kaynakları başlıklı makaleye bakın.