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
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.
CPU Profil Aracı'nı açmak için CPU zaman çizelgesinde herhangi bir yeri tıklayın.
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.
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.
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.
İ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.
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.
Ç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:
- Ç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.
- 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. - 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.
- 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.
- 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.
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:
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.
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çeve Yaşam Döngüsü ve İleti Dizileri bölümlerinde ilgili ileti dizilerini bulun.
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.
- 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
veya2
) 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.
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:
Görüntülü Reklam Ağı'nda Kareler parçasına bakın. Kırmızı çerçeveler araştırmaya uygun.
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 veRenderThread
öğesinde izleme etkinliklerini görene kadar yakınlaştırmaya devam edin.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ınChoreographer
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.Ö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.
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.