Pular para o conteúdo
Notícias e tutoriais sobre Linux
Android

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

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

correcao anr

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.

QUEM ESCREVE
Emanuel Negromonte

Sobre o autor

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 GNU/Linux, Software Livre e Código Aberto, dedica-se a descomplicar o universo tecnológico para entusiastas e profissionais. Seu foco é em notícias, tutoriais e análises aprofundadas, promovendo o conhecimento e a liberdade digital no Brasil.