Simples modificações podem fazer seu app ter uma boa performance.
Estes slides abordam performance de renderização, memory leaks e ferramentas para detectar problemas de performance.
na tela • Atualização de views na tela • Animações • Tempo para o GC recolher objetos 16ms 16ms 16ms Calculando: 1000ms 60 frames = 16.666ms/frame Frames Tempo é vital Dropped Frame GPU Profiling tool
Tempo é vital Dropped Frame GPU Profiling tool • Ocorre quando a execução demora mais que 16ms • Animações/transições sofrem pausa • Pode dar sensação que o app travou
pausa Tempo upload Bitmap na GPU atualizando/enviando display list gpu ++ , CPU aguardando measure/layout - hierarquia++ Desenho - métodos desenho sobrecarregado animações - usar outra thread entre frames - usar outra thread 16ms Frames Tempo é vital Dropped Frame GPU Profiling tool
que um pixel é redesenhado (a cada frame) • Algumas vezes colocamos background sem precisar • O desenho excessivo (em situações que poderiam ser evitadas) é o overdraw
Como você vê seu app Como Android vê seu app Nome Loren ipsun loren loren ipsun loren favoritar compartilhar Nome Loren ipsun loren loren ipsun loren favoritar compartilhar Definição Identificando overdraw Corrigindo overdraw
fundo rosa • Crie um “style” para cada tema da aplicação • No manifest, dentro da tag de cada activity coloque o tema correspondente • Isso evita você precisar colocar background no layout pai de cada layout Temas do seu app
layout extra • Customizar temas da aplicação • Desenhar somente o que está visível para o usuário. Ex: customviews (Udacity) • Reduzir layouts com transparência (The hidden cost of transparency) https://www.youtube.com/watch?v=wIy8g8yNhNk • ConstraintLayout https://android-developers.googleblog.com/2017/08/understanding- performance-benefits-of.html
memory leaks Memória • Gerenciamento de memória automático (automatic memory management) • O garbage collector marca os objetos eleitos como “destruíveis" e posteriormente os recolhe • Desenvolvedor não tem controle de quando GC passa
Object Lifecycle Object Object Object Activity Lifecycle LEAK MEMORY LEAKS • A activity está referenciada por outra instancia/objeto • A referência impede a memória de ser liberada • Todos os itens que estão ancorados à activity também sofrem leaks (adapters, views, etc)
• A activity atual é destruída • Outra activity é criada • Se tiver leaks na activity destruída, ela não é coletada • Parabéns: você ganhou uma activity de brinde :) Device rotacionado MEMORY LEAKS
• A activity é recriada toda vez que há uma mudança de configuração android:configChanges= ["mcc", "mnc", "locale","touchscreen", "keyboard", "keyboardHidden","navigation", "screenLayout", "fontScale","uiMode", "orientation", "screenSize","smallestScreenSize"] MEMORY LEAKS Bora fazer do jeito certo? #PorFavor Eu nunca te pedi nada…
10 vezes) • Nunca passe o contexto, views ou referências da activity para um Singleton (ou qualquer outro recurso que irá viver mais tempo que a activity) • Recomendado: não utilizar o contexto estático • Utilizar o contexto da aplicação • Banco de Dados, Singleton, etc • Inicialização libs (Fabric, Crashlytics, facebook) Contexto estático Classes anônimas e inner classes Referenciar views em chamadas assíncronas Soluções TIPOS DE MEMORY LEAKS
chamadas assíncronas Soluções • Facilitam a implementação • Permitem melhor organização do código • Mas podem trazem um problema: Referência implícita TIPOS DE MEMORY LEAKS
chamadas assíncronas Soluções • Chamadas assíncronas podem ter mais vida que a activity • Ao referenciar uma view numa chamada assíncrona pode ocorrer dois problemas: • A view pode não existir mais (a activity que possui a view pode ter sido destruída) (NullPointerException) • Pode estar causando um memory leak TIPOS DE MEMORY LEAKS
de CPU Profiling de rede • Adicionado como dependência do projeto • Ao usar o app, você recebe uma notificação quando há leaks • Ao clicar na notificação, mostra o ponto que sofreu leak
Não referencie views em classes anônimas que tenham tempo de vida mais longo que a activity • Use as ferramentas de profiling e Leak Canary para detectar leaks e ver o comportamento do seu app