Crashlytics kontrol panelindeki ANR etiketlerine göre Android uygulamanızdaki hataları 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.

Ek olarak Crashlytics belirli sorunlu konuların belirlenmesine yardımcı olabilir. ANR'leri analiz ediyoruz ve ardından Crashlytics kontrol panelinde ANR'deki hataların nasıl ayıklanacağına dair ipuçları sağlamak için ilgili ileti dizilerini etiketliyoruz.

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

Triggered ANR

Çok uzun süre engellenen ve ANR'yi tetikleyen bir ileti dizisine bununla ilgili açıklama eklenir Triggered ANR .

Sorunlu iş parçacığı, uygulamanın ana iş parçacığı veya yanıt vermediği tespit edilen herhangi bir iş parçacığı olabilir. Ancak konu şu şekilde etiketlendi: Triggered ANR ANR'nin gerçek nedeni olabilir veya olmayabilir. Bu ANR'lerde hata ayıklama ve düzeltmeye yönelik bilgiler sağlamak için Crashlytics ayrıca ANR'ye dahil olan diğer tüm ileti dizilerini de etiketler. Bu sayfanın ilerleyen bölümlerinde bir konuya uygulanabilecek diğer etiketler hakkında bilgi edinin.

Deadlocked

ANR'ye yol açan bir çıkmaza karıştığı tespit edilen tüm ileti dizilerine bununla ilgili açıklama eklenir Deadlocked etiket.

Bir iş parçacığı bekleme durumuna girdiğinde, gerekli bir kaynak başka bir iş parçacığı tarafından tutulduğundan ve bu iş parçacığı da ilk iş parçacığı tarafından tutulan bir kaynağı beklediğinde kilitlenme meydana gelir. Uygulamanın ana ileti dizisi bu durumdaysa ANR'lerin meydana gelmesi muhtemeldir.

Öneri

Kilitlenmeyle ilgili iş parçacıklarına bakın ve bu iş parçacıkları tarafından elde edilen kaynakları/kilitleri kontrol edin. Olası çözümler için Kilitlenme ve Kilitlenme önleme algoritmalarına bakın.

IO Root blocking

Yavaş G/Ç işlemlerini yürüten ve bu işlemleri engelleyen herhangi bir iş parçacığı Triggered ANR ileti dizisine şu açıklama eklenir: IO Root blocking etiketi. Eğer Triggered ANR ileti dizisi diğer ileti dizileri tarafından engellenmiyorsa, IO Root blocking iş parçacığı aynı zamanda bir Root blocking iş parçacığı.

Öneri

Genel olarak uygulamanız ana iş parçacığında pahalı G/Ç işlemlerini yürütmemelidir. Ana iş parçacığının olması durumunda IO Root blocking , ana iş parçacığında meydana gelen istenmeyen G/Ç işlemlerini tanımlamak için Katı Modu da kullanabilirsiniz.

Root blocking

Olarak etiketlenen konuyu engelleyen herhangi bir konu Triggered ANR şu ifade eklenir: Root blocking etiketi. Bir konu her ikisi olarak etiketlenmişse Root blocking ve Triggered ANR bu ileti dizisini engelleyen başka ileti dizisi yoktur.

Varsa Triggered ANR ileti dizileri diğer ileti dizilerini (belki de geçişli olarak) bekliyordu. Root blocking . Bir ileti dizisinin ANR'nin temel nedeni olmasının çeşitli nedenleri olabilir.

Öneri

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

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

Unknown root cause

Bir konu şununla etiketlendi: ANR'yi tetikleyen iş parçacığının olup olmadığı ancak ANR oluştuğunda işlemde boşta olması durumunda Unknown root cause etiketi. Crashlytics, temel nedeni belirlemek için yeterli bilgiye sahip değil. Bu ANR'nin meydana gelmesinin belirgin bir nedeni yoktur.

Öneri

ANR'lerin nasıl önleneceğine ilişkin genel tavsiyelere uyun. Örneğin, kodunuzda uygulamanın ana iş parçacığının 5 saniyeden fazla meşgul olabileceği yerleri belirleyin.