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

Android, uygulamanızdan bir kare oluşturup bunu ekranda görüntüleyerek kullanıcı arayüzünü oluşturur. Uygulamanızda kullanıcı arayüzünün oluşturulması yavaş olursa sistem, kareleri atlamaya zorlanır. Bu durumda, kullanıcı ekranında tekrarlanan bir titreme algılar. Buna jank denir.

duraklama olduğunda, genellikle kullanıcı arayüzü iş parçacığındaki (çoğu uygulamada ana iş parçacığıdır) eşzamansız çağrıyı engelleyen bir miktar yavaşlama veya eşzamansız çağrının engellenmesi buna genellikle neden olur. Sorunun nerede olduğunu belirlemek için sistem izlemelerini kullanabilirsiniz.

Android 12 ve sonraki sürümlerde duraklamaları algılama

Android 12 (API düzeyi 31) veya sonraki sürümleri kullanan cihazlarda, yakalanan bir iz, CPU Profiler'ın Ekran bölmesinin altındaki Janky çerçeveler kanalında gösterilir.

Sessizliği algılamak için

  1. Android Studio'da Görünüm > Araç Pencereleri > Profil Aracı'nı seçin veya araç çubuğundan Profil'i tıklayın.

    Dağıtım Hedefi Seçin iletişim kutusu açılırsa uygulamanızı profil oluşturma için dağıtacağınız cihazı seçin. Bir cihazı USB ile bağladıysanız ancak listede görmüyorsanız USB hata ayıklamasını etkinleştirdiğinizden emin olun.

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

  3. CPU Profiler'daki yapılandırmalar menüsünden Sistem İzleme'yi seçin ve Kaydet'i tıklayın. Uygulamanızla etkileşimi tamamladıktan sonra Durdur'u tıklayın.

  4. Ekran'ın altında Janky kareler kanalını görürsünüz. Varsayılan olarak, Profiler inceleme adayları olarak yalnızca kötü kareleri gösterir. Her kötü karedeki kırmızı kısım, karenin oluşturma son tarihinden sonra geçen süreyi vurgular.Janky çerçeveleri parçasının ekran görüntüsü

  5. Donuk bir kare bulduğunuzda bu kareyi tıklayın. İsteğe bağlı olarak, yakınlaştırmayı seçilen kareye odaklanacak şekilde ayarlamak için M tuşuna basabilirsiniz. İlgili etkinlikler şu ileti dizilerinde vurgulanır: ana iş parçacığı, RenderThread ve GPU tamamlama. Janky çerçevelerini ve ana ileti dizilerini gösteren Profiler 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, Tüm Kareler ve Yaşam Döngüsü onay kutuları işaretli olan Profiler ekran görüntüsü

Android 11'de olumsuzlukları algılama

Android 11 (API düzeyi 30) kullanan cihazlarda CPU Profiler'ın Çerçeve Yaşam Döngüsü bölümünde yakalanan bir iz gösterilir.

Yaşam Döngüsü bölümünü farklı parçalarla çerçeveleme

Çerçeve Yaşam Döngüsü bölümü, katman adını ve dört kanalı içerir. Her kanal, çerçeve oluşturma ardışık düzenindeki bir aşamayı temsil eder. Frame Yaşam Döngüsü öğeleri aşağıdaki gibidir:

  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 bileşim birimidir.
  2. Uygulama: Bu kanal, tamponun uygulama tarafından sıraya alındığı andan tekrar sıraya alındığı ana kadar geçen süreyi gösterir. Bu genellikle RenderThread içindeki izleme etkinliklerine karşılık gelir.
  3. GPU'yu bekleme: Bu kanal, arabelleğin ne kadar süreyle GPU'ya ait olduğunu gösterir. Bu, arabelleğin GPU'ya gönderilmesinden GPU'nun arabellek üzerindeki çalışmasını bitirmesine kadar geçen süredir. Bu durum, GPU'nun bu süre zarfında yalnızca bu arabellek üzerinde ç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 Denetleyici'yi kullanabilirsiniz.
  4. Beste: Bu parça, SurfaceFlinger'ın arabelleğe kilitlenip bunu düzenleme için gönderdiği andan arabelleğin ekrana gönderildiği ana kadar geçen süreyi gösterir.
  5. Ekrandaki kareler: Bu parça, karenin ekranda ne kadar süreyle kaldığını gösterir.

Çerçeve Yaşam Döngüsü bölümü, bir kare arabelleğinin oluşturma ardışık düzeninin farklı aşamaları arasında nasıl hareket ettiğini gösterir. Belirli bir kareyi takip etmeyi kolaylaştırmak için çerçeveler kare sayısına göre renklerle kodlanmıştır.

Android Studio, izdeki tüm kareleri Tüm Kareler sekmesinde de tablo biçiminde gösterir.

Tüm Kareler sekmesinde izdeki tüm karelerin tablosu

Kare #, Uygulama, GPU için bekle ve Beste sütunları, yukarıdaki gibi Çerçeve Yaşam Döngüsü bölümündeki parçalarla aynı verileri temsil eder. Kare Süresi sütunu, Uygulama'nın başlangıcından Görüntülü Reklamcılık'taki Kareler'in başlangıcına kadar olan süreyi temsil eder. Bu, bir kareyi uçtan uca oluşturmak için gereken süredir.

En kısa veya en uzun kareyi hızlı bir şekilde bulmak için kareler tablosunu herhangi bir sütuna göre sıralayabilirsiniz. Tablo, yüzlerce karede gezinmenize yardımcı olan sayfalandırma kontrollerini de destekler.

Android 11'de olumsuzlukları tespit etmek ve incelemek için aşağıdaki adımları uygulayın:

  1. En uzun karelerin ilk sırada görünmesi için Tüm Kareler tablosunu Uygulama sütununa göre azalan düzende sıralayın.

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

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

    Çerçeveler tablosunun yanında zaman çizelgesi görünümü

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

    Çerçeve Yaşam Döngüsü ve İleti Dizileri bölümleri

Android 10 ve önceki sürümlerde olumsuzlukları algılama

Android 10 (API düzeyi 29) ve önceki sürümleri kullanan cihazlar için ilgili işletim sistemi grafik ardışık düzeni bilgileri Ekran adlı CPU Profiler sistem izinin tek bir bölümünde 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 etkinliği gösterilir. 16 ms'den uzun olan etkinlikler, saniyede 60 kare (fps) oluşturma son tarihini aştığından olumsuz kareleri vurgulamak için kırmızı renktedir.
  • SurfaceFlinger: Bu bölümde, SurfaceFlinger'ın çerçeve arabelleklerini ne zaman işlediği gösterilir. SurfaceFlinger, görüntülemeye arabellek göndermekten sorumlu olan bir sistem işlemidir.
  • VSYNC: Bu bölümde, görüntüleme ardışık düzenini senkronize eden bir sinyal olan VSYNC görüntülenir. Parça, uygulamanızın çok geç başladığını gösteren VSYNC uygulama sinyalini görüntüler. Bu durum genellikle arayüz iş parçacığının meşgul olmasından kaynaklanır. Animasyon sırasında ekranda görünür bir titremenin belirmesine neden olur ve animasyon veya kaydırma tamamlanana kadar fazladan bir giriş gecikmesi ekler. Bu, saniyede 60 defadan daha sık veya değişken bir hızda gerçekleşebileceğinden, yüksek yenileme hızındaki ekranlarda görüntüleme özellikle önemlidir.
  • BufferQueue: Bu bölümde, kaç kare arabelleğin sıraya alındığı ve SurfaceFlinger'ın tüketmesini bekleyenler gösterilir. Bu kanal, Android 9 (API düzeyi 28) veya sonraki sürümleri çalıştıran cihazlara dağıtılan uygulamalar için uygulama BufferQueue (0, 1 veya 2) yüzeyinin arabellek sayısını gösterir. BufferQueue, Android grafik bileşenleri arasında hareket eden görüntü arabelleklerinin durumunu anlamanıza yardımcı olabilir. Örneğin, 2 değeri uygulamanın şu anda üçlü arabelleğe aldığı anlamına gelir. Bu da girişte fazladan gecikme yaşanmasına neden olur.

Görüntüleme bölümü, olası duraklamaları algılamak için yararlı sinyaller sağlar (örneğin, kullanıcı arayüzü iş parçacığı veya RenderThread 16 ms.den uzun sürdüğünde). Boşluğun nedenleriyle ilgili tam ayrıntıları araştırmak için kullanıcı arayüzü oluşturmasıyla ilgili iş parçacıklarını gösteren İş parçacıkları bölümünü inceleyebilirsiniz.

Görüntülü Reklam altındaki İleti Dizileri bölümü

Yukarıdaki şekilde, İleti dizileri bölümünde kullanıcı arayüzü iş parçacığı (java.com.google.samples.apps.iosched), RenderThread ve GPU completion ileti dizisi gösterilmektedir. Bunlar, kullanıcı arayüzü oluşturmayla ilgili iş parçacıklarıdır ve jank'a yol açabilir.

Android 10 veya önceki sürümlerde duraklamaları algılamak için şu adımları uygulayın:

  1. Görüntülü Reklam Ağı'nda Kareler parçasına bakın. Kırmızı çerçeveler araştırmaya uygun.

    Görüntülü Reklam altındaki Çerçeveler bölümü

  2. Zayıf olabilecek bir çerçeve 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. Kullanıcı arayüzü iş parçacığında ve RenderThread öğesinde izleme etkinliklerini görene kadar yakınlaştırmaya devam edin.

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

    Yukarıdaki şekilde Choreographer#doFrame, animasyon, düzeni, resim çizimini ve ilgili işlemleri koordine etmek için kullanıcı arayüzü iş parçacığının Choreographer değerini ne zaman çağırdığını gösterir. DrawFrames, RenderThread formu oluşturduğunda ve GPU'ya gerçek çizim komutları yayınladığında bunu gösterir.

  3. Özellikle uzun izleme etkinliğiyle karşılaşırsanız daha fazla yakınlaştırabilir ve yavaş oluşturmaya neyin neden olduğunu öğrenebilirsiniz. Yukarıdaki şekilde, kullanıcı arayüzü iş parçacığında inflate gösterilmektedir. Bu, uygulamanın düzeni genişletmek için zaman harcadığı anlamına gelir. inflate etkinliklerinden birini yakınlaştırdığınızda, aşağıda gösterildiği gibi her bir kullanıcı arayüzü bileşeninin tam olarak ne kadar sürdüğünü öğrenebilirsiniz.

    Bir kullanıcı arayüzü bileşeninin tam süresini gösteren menü

Daha fazla bilgi

duraklamanın nasıl azaltılacağı hakkında daha fazla bilgi edinmek için Yaygın jank kaynakları bölümüne bakın.