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 ileti dizilerini tespit etmenize yardımcı olabilir. ANR'leri analiz eder, ardından DevOps ve Etkileşim > Crashlytics kontrol paneli'nde geçerli mesaj dizilerini etiketleyerek ANR'de hata ayıklama konusunda ipuçları veririz.

Bu sayfadaki aşağıdaki bölümlerde her bir ANR etiketinin ne anlama geldiği açıklanmakta, bu etikete sahip örnek bir ANR gösterilmekte ve ANR'de hata ayıklama için önerilen bir çözüm sunulmaktadır.

Triggered ANR

Çok uzun süre engellenen ve ANR'yi tetikleyen bir iş parçacığı bu Triggered ANR etiketiyle ek açıklama alır.

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

Deadlocked

ANR'ye yol açan bir kilitlenmeye dahil olduğu tespit edilen tüm iş parçacıkları bu Deadlocked etiketiyle ek açıklama alır.

Kilitlenme, bir iş parçacığının bekleme durumuna girmesiyle oluşur. Bunun nedeni, gerekli bir kaynağın başka bir iş parçacığı tarafından tutulmasıdır. Bu iş parçacığı da ilk iş parçacığı tarafından tutulan bir kaynağı beklemektedir. Uygulamanın ana iş parçacığı bu durumdaysa ANR'ler meydana gelebilir.

Öneri

Kilitlenmeye dahil olan ileti dizilerine bakın ve bu ileti dizileri tarafından edinilen kaynakları/kilitleri kontrol edin. Olası çözümler için Kilitlenme ve Kilitlenmeyi önleme algoritmaları başlıklı makaleleri inceleyin.

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 ek açıklama alır. Triggered ANR iş parçacığı diğer iş parçacıkları tarafından engellenmiyorsa IO Root blocking iş parçacığı da Root blocking iş parçacığıdır.

Öneri

Genel olarak uygulamanız, ana iş parçacığında yüksek maliyetli G/Ç işlemleri yürütmemelidir. Ana iş parçacığının IO Root blocking olması durumunda, ana iş parçacığında gerçekleşen istenmeyen G/Ç işlemlerini belirlemek için yüksek düzey modunu da kullanabilirsiniz.

Root blocking

Triggered ANR olarak etiketlenen ileti dizisini engelleyen tüm ileti dizileri Root blocking etiketiyle ek açıklama alır. Bir mesaj dizisi hem Root blocking hem de Triggered ANR olarak etiketlenmişse bu mesaj dizisini engelleyen başka bir mesaj dizisi yoktur.

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

Öneri

Ana iş parçacığında CPU yoğunluklu işleri en aza indirin. CPU yoğunluklu görevleri gerçekleştirmek için çalışan veya arka plan iş parçacıkları kullanın.

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

Unknown root cause

ANR'yi tetikleyen ancak ANR gerçekleştiğinde işlemde boşta olan bir iş parçacığı Unknown root cause etiketiyle etiketlenir. Crashlytics, temel nedeni belirlemek için yeterli bilgiye sahip değil. Bu ANR'nin neden oluştuğuna dair belirgin bir neden yok.

Öneri

ANR'leri önlemeyle ilgili genel önerileri uygulayın. Örneğin, kodunuzda uygulamanın ana iş parçacığının 5 saniyeden uzun süre meşgul olabileceği yerleri belirleyin.

Waiting for binder call

Bir bağlayıcı çağrısı bekleyen ve Triggered ANR iş parçacığını engelleyen tüm iş parçacıkları Waiting for binder call etiketiyle ek açıklama alır. Triggered ANR iş parçacığı başka iş parçacıkları tarafından engellenmiyorsa Waiting for binder call iş parçacığı da bir Root blocking iş parçacığıdır.

Öneri

Bağlayıcı çağrısının gecikmesi öngörülemez olabileceğinden bağlayıcı çağrılarını G/Ç işlemleri gibi ele alın ve mümkün olduğunda ana iş parçacığında yapmaktan kaçının. Bağlayıcı çağrılarını (bağlayıcı işlemleriyle sonuçlanan platform API çağrıları dahil) tetikleyen kodu bir arka plan ileti dizisine taşıyın veya ana ileti dizisinden çağrı yapılması kaçınılmazsa sonuçları önbelleğe alın.