Android recebe correção para reduzir travamentos (ANRs) durante relatórios de bugs

Escrito por
Emanuel Negromonte
Emanuel Negromonte é Jornalista, Mestre em Tecnologia da Informação e atualmente cursa a segunda graduação em Engenharia de Software. Com 14 anos de experiência escrevendo sobre...

Reduzindo travamentos durante relatórios de bug com uma thread dedicada

Se você já viu a temida caixa de diálogo “Aplicativo Não Respondendo” no seu Android, boas notícias: uma mudança fundamental no AOSP (Android Open Source Project) visa reduzir a frequência com que isso acontece. Um novo patch do desenvolvedor Parijat Banerjee ataca uma causa comum de travamentos, especialmente aqueles que ocorrem quando o sistema está coletando informações para um relatório de bug.

O culpado silencioso: Como dumpsys causava travamentos

Imagine a thread principal de um aplicativo como o chef principal de uma cozinha movimentada. Ela precisa estar sempre livre para responder a novos pedidos (toques na tela, gestos, etc.). O problema era que, ao gerar um relatório de bug, o sistema pedia ao “chef” para parar tudo e fazer um inventário detalhado da despensa (dump). Essa tarefa de I/O podia levar tempo demais, parando a cozinha inteira e disparando um ANR (Application Not Responding). Assim, a experiência do usuário era prejudicada justamente quando ele mais precisava de fluidez.

A solução na ActivityThread: Thread dedicada para dumps

Para resolver isso, a equipe do Android implementou uma verdadeira revolução na classe ActivityThread. A mudança cria um executor com uma única thread chamada dump-thread. Em vez de enviar as solicitações de dumpService e dumpActivity para a fila de mensagens da thread principal (o “chef”), o sistema submete essas chamadas de diagnóstico ao novo executor. Agora, qualquer operação lenta ou de I/O dentro da implementação de dump de um aplicativo é executada em segundo plano, sem atrapalhar a interface do usuário.

Principais pontos da implementação técnica

  • Criação de um executor Executors.newSingleThreadExecutor() batizado de dump-thread.
  • Encapsulamento das chamadas dumpService() e dumpActivity() em Runnable submetidos ao executor.
  • Uso de sendMessage() na main thread apenas para sinalizar início e fim, sem bloqueio de I/O.
  • Manutenção da compatibilidade com Binder e SEPolicy, garantindo segurança e isolamento.

Essa abordagem garante que relatórios de bug continuem ricos em detalhes, mas sem custo para a estabilidade do sistema. E, de quebra, melhora significativamente o desempenho em cenários de diagnóstico pesado.

Impacto no desempenho e na experiência do usuário

Com essa correção de ANR no Android, o usuário final deve notar:

  • Menos interrupções durante o uso normal do aparelho.
  • Relatórios de bug completos, sem travar o aplicativo.
  • Maior confiabilidade em apps que realizam dumps extensivos, como ferramentas de monitoramento ou teste de hardware.

Para desenvolvedores, essa mudança também simplifica a vida: não é mais necessário contornar manualmente as chamadas de dumpsys para evitar ANRs. A responsabilidade de gerenciar o thread de diagnóstico fica centralizada na framework, liberando o código de aplicativos e bibliotecas de gambiarras.

Por que isso importa

Em um ecossistema com bilhões de dispositivos Android ativos, pequenas otimizações de responsividade fazem uma enorme diferença. Cada travamento evitado evita frustrações e potenciais desistências de aplicativos, além de reduzir o número de relatórios negativos na Play Store. Essa atualização mostra como o AOSP continua evoluindo, agregando valor tanto para usuários quanto para desenvolvedores que confiam no ecossistema Android.

Compartilhe este artigo