Novidades sobre produtos

Preparar o app para limites de memória mais amplos

Leitura de 2 minutos
Acessar o perfil de Blair Harmon
Blair Harmon Diretor de gerenciamento de produtos, plataforma Android

Uma ótima experiência do usuário é fundamental para a missão do Android, e cumprir essa promessa exige manter os dispositivos rápidos, responsivos e confiáveis. Por isso, a otimização de memória é mais importante do que nunca. Em todo o ecossistema, os novos dispositivos estão mantendo ou até diminuindo a capacidade de memória física em resposta aos aumentos de preço. No entanto, os usuários continuam esperando a mesma experiência de app perfeita e de alto desempenho.

No Android 17, introduzimos limites de memória por app, começando com dispositivos Pixel, para ajudar a proteger a experiência geral do usuário contra aplicativos que usam memória em excesso e causam lentidão em todo o sistema. No próximo ano, um número crescente de fabricantes vai aproveitar os limites de memória por app do Android em todo o portfólio de configurações de RAM de dispositivos, de 4 GB a 16 GB ou mais. Se o app exceder esses limites, ele será desacelerado e poderá ser encerrado. Otimizar o consumo de memória do app é essencial para evitar a limitação do SO e manter uma experiência do usuário perfeita.  

Nesta postagem, vamos explicar como esses limites funcionam nos bastidores, como medir seu consumo de memória usando novas métricas do Android vitals e etapas práticas para otimizar seu app ou jogo.

Noções básicas sobre limites de memória 

Quando o app excede a capacidade de memória, o Android toma medidas progressivas para proteger a capacidade de resposta do dispositivo:

  1. Troca de zRAM: se o app atingir o limite alocado, o sistema vai forçar as páginas do app para a zRAM (RAM compactada).  Embora o zRAM impeça a remoção imediata, a compressão e a descompressão de páginas adicionam sobrecarga de CPU, o que pode resultar em instabilidade perceptível da interface e lentidão na experiência.
  2. Encerramento do processo: se o app continuar aumentando o uso da memória além do limite do zRAM, ele será encerrado pelo sistema.  Para determinar se a sessão do app foi afetada por essas restrições no campo, chame getDescription() em ApplicationExitInfo. Se o sistema aplicou um limite, o motivo da saída é informado como REASON_OTHER, e a string de descrição vai conter "MemoryLimiter:AnonSwap". Você também pode usar o criação de perfil com base em gatilhos usando TRIGGER_TYPE_ANOMALY para capturar automaticamente despejos de heap quando o limite de memória for atingido.  

Para saber mais sobre os limites de memória por app e a aplicação do sistema, consulte a documentação sobre limites de memória de apps no Android 17. Para testar seu aplicativo em diferentes configurações de dispositivo, use os comandos adb do Memory Limiter

Monitoramento e diagnóstico de problemas de memória

Não é possível otimizar o que não pode ser medido. Para identificar vazamentos de memória, alocações excessivas de heap e falhas de falta de memória (OOM) em todo o ecossistema Android, é necessário usar ferramentas de monitoramento complementares:

  • Saúde em nível macro com o Android vitals:para ter uma visibilidade ampla em nível de população sem sobrecarga adicional, o Android vitals do Google Play Console oferece métricas essenciais, como Uso da memória (RSS anônimo + espaço de troca) e Uso da memória de bitmap. Isso oferece um instantâneo claro da distribuição da memória em diferentes estados de processo (em primeiro plano, em segundo plano, serviços percebidos pelo usuário e em cache) e intervalos de classe de RAM, ajudando você a identificar outliers de memória.
  • Saídas do Memory Limiter e rastreamento de OOM com o Firebase Crashlytics:para ficar por dentro da degradação grave da memória antes que ela afete suas principais métricas, a versão 20.1.0 do Crashlytics apresenta dados de depuração adicionais para ajudar você a detectar, priorizar e corrigir exceções de falta de memória e encerramentos do Memory Limiter. O rastreamento desses eventos com registros personalizados e metadados de chave-valor oferece contexto imediato sobre o status do processo quando ocorre uma falha de memória.
  • Rastreamentos no campo com o ProfilingManager:para equipes capazes de manter um framework de observabilidade de performance, a API ProfilingManager introduzida no Android 15 (nível 35 da API) permite que seu app solicite e colete programaticamente artefatos detalhados de depuração de memória, como despejos de heap Java e perfis de heap diretamente de dispositivos de produção. Também é possível acionar capturas de heap dump com base em sinais específicos do sistema, como TRIGGER_TYPE_OOM e TRIGGER_TYPE_ANOMALY

Leia nossa documentação para saber mais sobre outras técnicas de monitoramento de memória.

Resumo e próximas etapas

Com o aumento dos limites de memória por app no Android em todas as classes de RAM, agora é a hora de auditar o consumo de memória:

  1. Priorize otimizações de memória: evite que seu app seja afetado por limites de memória usando práticas recomendadas
  2. Monitore o uso da memóriamonitore o comportamento da memória do app para detectar e resolver comportamentos anômalos.  
  3. Otimize seu jogo: siga as orientações mais recentes para jogos e apps multimídia complexos para maximizar a economia de memória em todos os estados de processo.

Recursos e referências úteis

Escrito por:
Continuar lendo