Erros de aplicativo que não responde (ANR) são acionados quando o thread de UI do aplicativo não responde por mais de
Além disso, o Crashlytics pode ajudar a identificar tópicos problemáticos específicos. Analisamos ANRs e, em seguida, no painel do Crashlytics , marcamos os threads aplicáveis para fornecer dicas sobre como depurar o ANR.
As seções a seguir nesta página explicam o que cada tag ANR significa, mostram um exemplo de ANR com essa tag e fornecem uma solução recomendada para depurar o ANR.
Triggered ANR
Um thread que foi bloqueado por muito tempo e acionou o ANR é anotado com esteTriggered ANR
.
O thread problemático pode ser o thread principal do aplicativo ou qualquer thread que não esteja respondendo. No entanto, o tópico marcado comoTriggered ANR
pode ou não ser a causa real da ANR. Para fornecer insights para depuração e correção desses ANRs, o Crashlytics também marca quaisquer outros threads envolvidos no ANR. Nas seções seguintes desta página, aprenda sobre outras tags que podem ser aplicadas a um tópico.
Deadlocked
Quaisquer threads que estejam envolvidos em um deadlock que levou ao ANR são anotados com esteDeadlocked
.
Um deadlock ocorre quando um thread entra em estado de espera porque um recurso necessário está retido por outro thread, que também está aguardando um recurso retido pelo primeiro thread. Se o thread principal do aplicativo estiver nessa situação, é provável que ocorram ANRs.
Recomendação
Observe os threads envolvidos no deadlock e verifique os recursos/bloqueios adquiridos por esses threads. Consulte Algoritmos de prevenção de Deadlock e Deadlock para possíveis soluções.
IO Root blocking
Qualquer thread que estava executando operações de E/S lentas e bloqueou oTriggered ANR
é anotado com oIO Root blocking
. Se oTriggered ANR
não é bloqueado por outros threads, então oIO Root blocking
também é umRoot blocking
.
Recomendação
Em geral, seu aplicativo não deve executar operações de E/S caras no thread principal. No caso do thread principal serIO Root blocking
, você também pode usar o modo estrito para identificar quaisquer operações de E/S não intencionais que estejam acontecendo no thread principal.
Root blocking
Qualquer tópico que bloqueou o tópico marcado comoTriggered ANR
é anotado com oRoot blocking
. Se um tópico estiver marcado como ambosRoot blocking
eTriggered ANR
, então não há outros threads que bloqueiem esse thread.
Caso existamTriggered ANR
estavam aguardando (talvez transitivamente) por outros threads, eles sãoRoot blocking
. Pode haver vários motivos pelos quais um thread é a causa raiz do ANR.
Recomendação
Minimize o trabalho intensivo da CPU no thread principal. Use threads de trabalho ou de segundo plano para executar tarefas com uso intensivo de CPU.
Minimize o trabalho intensivo de E/S, como carregar de um banco de dados, no thread principal.
Unknown root cause
Um tópico é marcado com oUnknown root cause
se foi o thread que acionou o ANR, mas estava ocioso no processo quando o ANR ocorreu. O Crashlytics não possui informações suficientes para determinar a causa raiz. Não há nenhuma razão evidente para a ocorrência desta ANR.
Recomendação
Siga os conselhos gerais sobre como prevenir ANRs. Por exemplo, identifique os locais no seu código onde o thread principal do aplicativo pode ficar ocupado por mais de