Android uygulamanızda Crashlytics kontrol panelindeki ANR etiketlerine dayalı hata ayıklayın

Uygulama Yanıt Vermiyor (ANR) hataları, uygulamanın kullanıcı arayüzü iş parçacığı 5 saniyeden uzun süre yanıt vermediğinde tetiklenir. ANR'ler ve ANR'leri teşhis etme hakkında daha fazla bilgiyi Android belgelerinde bulabilirsiniz.

Ayrıca Crashlytics, sorunlu mesaj dizilerini tespit etmenize yardımcı olabilir. ANR'leri analiz eder ve ardından ANR'nin nasıl ayıklanacağına dair ipuçları sağlamak için Crashlytics kontrol panelinde geçerli ileti dizilerini etiketleriz.

Bu sayfada yer alan aşağıdaki bölümlerde her ANR etiketinin ne anlama geldiği açıklanır, ilgili etiketin kullanıldığı örnek bir ANR gösterilir ve ANR'de hata ayıklama için önerilen bir çözüm sunulur.

Triggered ANR

Çok uzun süre engellendiğinden ANR'yi tetikleyen ileti dizileri bu Triggered ANR etiketiyle ek açıklamaya sahiptir.

Sorunlu ileti dizisi, uygulamanın ana ileti dizisi veya yanıt vermediği tespit edilen herhangi bir ileti dizisi olabilir. Ancak Triggered ANR olarak etiketlenen ileti dizisi, ANR'nin asıl nedeni olabilir veya olmayabilir. Crashlytics, bu ANR'lerle ilgili hata ayıklama ve düzeltme bilgileri sağlamak için ANR'ye dahil olan diğer ileti dizilerini de etiketler. Bu sayfanın aşağıdaki bölümlerinde, bir ileti dizisine uygulanabilecek diğer etiketler hakkında bilgi edinebilirsiniz.

Deadlocked

ANR'ye yol açan bir kilitlenmede yer aldığı tespit edilen tüm ileti dizileri bu Deadlocked etiketiyle ek açıklamaya sahiptir.

Gerekli bir kaynak başka bir iş parçacığı tarafından tutulduğu için bir iş parçacığı bekleme durumuna girdiğinde kilitlenme meydana gelir. Bu iş parçacığı da ilk iş parçacığı tarafından tutulan bir kaynağı bekler. Uygulamanın ana iş parçacığı bu durumdaysa ANR'lerin gerçekleşmesi muhtemeldir.

Öneri

Kilitlenmeyle ilişkili ileti dizilerine bakın ve bu iş parçacıkları tarafından edinilen kaynakları/kilitleri kontrol edin. Olası çözümler için Kilitlenme ve Kilitlenmeyi önleme algoritmaları başlıklı makalelere bakın.

IO Root blocking

Yavaş G/Ç işlemleri yürüten ve Triggered ANR iş parçacığını engelleyen tüm iş parçacıkları, IO Root blocking etiketiyle belirtilir. Triggered ANR mesaj dizisi diğer mesaj dizileri tarafından engellenmezse IO Root blocking mesaj dizisi de Root blocking mesaj dizisidir.

Öneri

Genel olarak, uygulamanız ana iş parçacığında pahalı G/Ç işlemleri yürütmemelidir. Ana iş parçacığı IO Root blocking ise ana iş parçacığında gerçekleşen istenmeyen G/Ç işlemlerini tespit etmek için Katı Mod'u da kullanabilirsiniz.

Root blocking

Triggered ANR olarak etiketlenen ileti dizisini engelleyen tüm ileti dizilerinde Root blocking etiketi bulunur. Bir ileti dizisi hem Root blocking hem de Triggered ANR olarak etiketlenmişse bu ileti dizisini engelleyen başka ileti dizisi yoktur.

Diğer ileti dizileri için bekleyen (belki de geçişli olarak) Triggered ANR ileti dizileri varsa bunlar Root blocking şeklindedir. Bir iş parçacığının ANR'nin temel nedeni olmasının çeşitli nedenleri olabilir.

Öneri

Ana iş parçacığında CPU'yu yoğun olarak kullanan işleri en aza indirin. CPU'yu yoğun olarak kullanan görevleri gerçekleştirmek için işleyici veya arka plan iş parçacıklarını kullanın.

Ana iş parçacığında, veritabanından yükleme gibi yoğun G/Ç çalışmalarını en aza indirin.

Unknown root cause

ANR'yi tetikleyen ancak ANR oluştuğunda işlemde boşta olan bir ileti dizisi Unknown root cause etiketiyle etiketlenir. Crashlytics, sorunun temel nedenini belirlemek için yeterli bilgiye sahip değil. Bu ANR'nin nedeni net değil.

Öneri

ANR'leri önlemeyle ilgili genel tavsiyeleri uygulayın. Örneğin, kodunuzda uygulamanın ana iş parçacığının 5 saniye boyunca meşgul olabileceği yerleri tanımlayın.