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'lerin teşhis edilmesi hakkında daha fazla bilgiyi Android belgelerinde bulabilirsiniz.

Ayrıca Crashlytics, sorunlu belirli iş parçacıklarını belirlemeye yardımcı olabilir. ANR'leri analiz ederiz. Ardından, Crashlytics kontrol panelinde, ANR'de nasıl hata ayıklama yapılacağıyla ilgili ipuçları vermek için geçerli iş parçacıklarını etiketleriz.

Bu sayfadaki aşağıdaki bölümlerde, her bir ANR etiketinin ne anlama geldiği açıklanmakta, bu etikete sahip bir örnek ANR 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 ileti dizisi, Triggered ANR etiketiyle açıklama olarak eklenir.

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. Bu ANR'lerin hata ayıklaması ve düzeltilmesi için analizler sağlamak üzere, Crashlytics ANR'ye dahil olan diğer tüm ileti dizilerini de etiketler. Bu sayfanın aşağıdaki bölümlerinde, bir ileti dizisine uygulanabilecek diğer etiketler hakkında bilgi edinin.

Deadlocked

ANR'ye yol açan bir kilitlenmeye karıştığı tespit edilen tüm ileti dizileri bu Deadlocked etiketiyle açıklama eklenir.

Bir iş parçacığı, gerekli bir kaynak başka bir iş parçacığı tarafından tutulduğu için bekleme durumuna girdiğinde kilitlenme oluşur. Bu iş parçacığı da ilk iş parçacığı tarafından tutulan bir kaynağı beklemektedir. Uygulamanın ana iş parçacığı bu durumdaysa ANR'lerin oluşması muhtemeldir.

Öneri

Kilitlenmeye dahil olan iş parçacıklarına bakın ve bu iş parçacıkları tarafından edinilen kaynakları/kilitleri kontrol edin. Olası çözümler için Kilitlenme ve Kilitlenme önleme algoritmaları başlıklı makalelere bakın.

IO Root blocking

Yavaş G/Ç işlemleri yürüten ve Triggered ANR ileti dizisini engelleyen tüm ileti dizileri IO Root blocking etiketiyle açıklama eklenir. Triggered ANR ileti dizisi diğer ileti dizileri tarafından engellenmezse IO Root blocking ileti dizisi de Root blocking ileti dizisidir.

Öneri

Genel olarak, uygulamanız ana iş parçacığında maliyetli G/Ç işlemleri yürütmemelidir. Ana iş parçacığı IO Root blocking olduğunda ana iş parçacığında gerçekleşen istenmeyen G/Ç işlemlerini belirlemek için katı modu da kullanabilirsiniz.

Root blocking

Triggered ANR olarak etiketlenen ileti dizisini engelleyen tüm ileti dizileri Root blocking etiketiyle açıklama eklenir. Bir ileti dizisi hem Root blocking hem de Triggered ANR olarak etiketlenirse bu ileti dizisini engelleyen başka ileti dizileri yoktur.

Herhangi bir Triggered ANR iş parçacığı diğer iş parçacıklarının tamamlanmasını bekliyorsa (belki de geçişli olarak) 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'yu yoğun olarak kullanan işleri en aza indirin. CPU'yu yoğun olarak kullanan görevleri gerçekleştirmek için çalışan veya arka plan iş parçacıklarını kullanın.

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

Unknown root cause

Bir ileti dizisi, ANR'yi tetikleyen ileti dizisi olmasına rağmen ANR oluştuğu sırada işlemde boşta ise 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 önleme ile ilgili genel tavsiyelere uyun. Örneğin, kodunuzda uygulamanın ana iş parçacığının 5 saniyeden uzun süre meşgul olabileceği yerleri belirleyin.