Análise e geração de problemas de ANR do Android

Razões para ANR

1. ANR (o aplicativo Application Not Response não responde).
2. Se o thread de interface do aplicativo Android for bloqueado por muito tempo, um erro "aplicativo não está respondendo" (ANR) será acionado. Se o aplicativo estiver em primeiro plano, o sistema exibirá uma caixa de diálogo para o usuário , conforme mostrado na figura abaixo. A caixa de diálogo ANR fornecerá ao usuário a opção de sair do aplicativo à força.
Insira a descrição da imagem aqui
3. Quando o
tempo limite de InputDispatching será acionado : Não é possível responder a eventos de toque na tela ou eventos de entrada de teclado em 5 segundos.
Tempo limite de BroadcastQueue: quando a função onReceive () da transmissão de primeiro plano (BroadcastReceiver) é executada, o processamento não é concluído em 10 segundos e o plano de fundo é de 60 segundos.
Tempo limite do serviço: o serviço em primeiro plano está dentro de 20 segundos e o serviço em segundo plano não é executado em 200 segundos.
Tempo limite de ContentProvider: a publicação de ContentProvider não termina em 10s.

Diagnóstico ANR

1. Vários modos ANR comuns

  • O aplicativo executa operações envolvendo E / S muito lentamente no encadeamento principal.
  • O aplicativo executa cálculos de longo prazo no thread principal.
  • O encadeamento principal está fazendo uma chamada de fichário síncrona para outro processo e este leva muito tempo para retornar.
  • O encadeamento principal está em um estado bloqueado, aguardando os blocos sincronizados para operações longas que ocorrem em outro encadeamento.
  • Um conflito ocorre entre o encadeamento principal e outro encadeamento no processo ou por meio de uma chamada de fichário. O thread principal não está apenas aguardando a conclusão da operação longa, mas também em um estado de conflito.
  • O tempo de GC é muito longo etc.

2. Habilite a caixa de diálogo ANR de fundo
Somente quando Mostrar todos os ANRs estiver habilitado nas opções do desenvolvedor do dispositivo, o Android exibirá a caixa de diálogo ANR para aplicativos que demoram muito para processar mensagens de transmissão. Portanto, o sistema nem sempre mostra ao usuário uma caixa de diálogo ANR de fundo, mas o aplicativo ainda pode ter problemas de desempenho.
3. Ative o modo estrito para ser chamado em onCreate no aplicativo

StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder() //
        .detectAll() 
        .penaltyLog() 
        .penaltyDeath() 
        .build());

4.TraceView
Você pode usar o TraceView para obter as informações de rastreamento do aplicativo em execução ao visualizar o caso de uso e descobrir onde o thread principal está ocupado.
Você pode usar a opção de desenvolvedor "Gerar relatório de bug" no dispositivo ou o comando adb bugreport na máquina de desenvolvimento para obter o relatório de bug do dispositivo físico.

adb root
adb shell ls /data/anr
adb pull /data/anr/<filename> /Desktop/anr

Também podemos visualizar o dispositivo diretamente no Device File Explorer após conectar o dispositivo. Conforme mostrado na figura abaixo,
Insira a descrição da imagem aqui
ao obter o nome do arquivo de rastreamento sob anr ou abrindo a parte superior haverá o tempo de ocorrência, encontrar o tempo aproximado em que o ANR ocorreu e, em seguida, encontrar o início no log O log relacionado a "main" é mostrado na figura a seguir. A figura mostra o problema que usei para testar o teste nativo do Xcrash. O mesmo método de análise é encontrar main e, em seguida, analisar a seguinte pilha:

Insira a descrição da imagem aqui

Evite problemas de ANR

Tente evitar operações demoradas no thread principal (thread de interface do usuário).

A análise Anr oficial do Android inclui análise Systrace

É melhor explicar os parâmetros no arquivo de rastreamento

Acho que você gosta

Origin blog.csdn.net/u011148116/article/details/106759796
Recomendado
Clasificación